2011年9月5日 星期一

javascript childNodes length 在不同瀏覽器間的差異

前陣子, 遇到一個奇怪的情況,
同一行指令, 在 IE 與非IE 執行的結果不同,
與大家一起分享...



■■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 先來看看用 ie 看 xml 的資料如下:
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━



■■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 用 chrome 看 xml 的資料如下:
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


說明: span 裡, 放一個 span, span 的下一層, 再放一個 span, 3層式的 span.



■■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 有問題的程式碼, 只有下面這一行, 猜猜看 alert 出來的數字應該是多少?
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━




■■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ ie 的答案是: 1
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━



■■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ google chrome 的答案是: 3
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━





■■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 解決辦法: 使用 getRealChild function 即可取得"一致" 的length
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
var myRealChilds = getRealChild(myNodeObj);
//alert(myRealChilds.length);

function getRealChild(elem){
var realChild = [];
for(var i = 0;i < elem.childNodes.length; i++){
if(elem.childNodes[i].nodeType == 1){
realChild.push(elem.childNodes[i]);
}
}
return realChild;
}

沒有留言:

張貼留言

Facebook 留言板