這篇技術筆記與大家分享的是:解決IE8(及以下)不支持getElementsByClassName的方法。如果有說錯的地方,麻煩留言告訴我,我及時更正,一來是更新一下我的認知,二來也是不要誤導的他人,謝謝。
我們在給元素設置樣式的時候,可以說用的最多的就是類(class)了。遺憾的是在低版本IE瀏覽器(IE8及其以下版本)中,我們不能用getElementsByClassName,因為IE沒有為document對象添加這個方法。
// IE8及其以下版本中 這個結果是false
console.info('getElementsByClassName' in window.document);
下面,分享一下我的getElementsByTagName的兼容寫法:
/* 參數說明: obj參數:一個DOM對象,getClass函數會取得這個對象下的全部元素節點。 sClass:一個字符串,獲取元素的類(class)名。 */
function getClass(obj,sClass){ // 准備一個數組 做為函數調用的結果返回
var aResult = []; // 如果docuemnt對象中有getElementsByClassName這個方法 我們就用瀏覽器提供的
因為瀏覽器提供的效率更高
if('getElementsByClassName' in document){ aResult = obj.getElementsByClassName(sClass); } // 如果瀏覽器沒有 那么我們自己來實現 總共4步
else{ //1.獲取obj下所有的元素
var aEle = obj.getElementsByTagName('*'); //2.用for循環來檢查每個子元素
for( var i=0; i<aEle.length; i++ ){ // 3.得到每個子元素className值 這個值是字符串
var str = aEle[i].className; // 4.如果該元素的class屬性有我們需要的class 那么把它放進aResult
if(str.indexOf(sClass)!=-1){ aResult.push(aEle[i]); } } } return aResult; }