[ js ] getElementsByClassName for IE6

看板Ajax作者 (死城盜賊)時間15年前 (2010/07/11 19:33), 編輯推噓1(109)
留言10則, 4人參與, 最新討論串1/3 (看更多)
昨天研究了一下一本書 征服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
this/call/apply是很重要的觀念,我下一集就打算寫 scope
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
js 踩到雷系列 XD 其實這個題目已經想好很久了 苦無時間下
07/11 22:13, 4F

07/11 23:18, , 5F
TonyQ大有Blog嗎
07/11 23:18, 5F

07/11 23:42, , 6F
沒 :p 沒寫blog的習慣
07/11 23:42, 6F

07/12 00:49, , 7F
要取所有element不是用 all or getElementsByTagName('*')?
07/12 00:49, 7F

07/12 00:53, , 8F
通常不會用all啦,不過後面那個我還真的是沒看過。XD
07/12 00:53, 8F

07/12 00:53, , 9F
測過還真的是ie6,7,8,fx都support,真不錯。筆記下來XD
07/12 00:53, 9F

07/12 00:54, , 10F
07/12 00:54, 10F
文章代碼(AID): #1CEQmJMf (Ajax)
文章代碼(AID): #1CEQmJMf (Ajax)