[ js ] getElementsByClassName for IE6
昨天研究了一下一本書
征服javascript
對其中的this與函數作用域以及fn.call()很有興趣
就寫出了這個函數
if(!document.getElementsByClassName) {
document.getElementsByClassName=function(classN) { //用運算式創立函數
var tag=this.firstChild; //this指向document
this.a=(this==document? [] : null); //每次從外部呼叫函數時
do{ //清空陣列
if(tag.hasChildNodes()) {
document.getElementsByClassName.call(tag,classN);
/*
*fn.call(a,arg)將會執行fn()並使fn()的作用域改為a arg則是參數
*簡單的說就是this將會指向到tag
*/
}
if(tag.className==classN)
document.a.push(tag);
tag=tag.nextSibling;
}while(tag);
return document.a;
};
}
寫的時候為了document.a搞到焦頭爛額...
每次執行都要清除一次 那這樣執行到第六行時因為回呼函數也會被清除...
所以只好改用this.a並加入一個判斷式 當this指向document時就清空this.a
又因為this指向到document所以此時的this.a等於document.a
當執行到第六行時的this就會指向到tag 所以這時候的this.a = tag.a所以給null
因為用不到 當變數值指向null時就會被javascript編譯器回收
總之就是錯綜複雜 搞到我也亂了XDDDD
所以...
IE6 must die!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.172.95.198
→
07/11 20:04, , 1F
07/11 20:04, 1F
→
07/11 20:04, , 2F
07/11 20:04, 2F
→
07/11 20:18, , 3F
07/11 20:18, 3F
→
07/11 22:13, , 4F
07/11 22:13, 4F
推
07/11 23:18, , 5F
07/11 23:18, 5F
→
07/11 23:42, , 6F
07/11 23:42, 6F
→
07/12 00:49, , 7F
07/12 00:49, 7F
→
07/12 00:53, , 8F
07/12 00:53, 8F
→
07/12 00:53, , 9F
07/12 00:53, 9F
→
07/12 00:54, , 10F
07/12 00:54, 10F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 3 篇):
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章