關於jQuery通過ID獲取元素時在IE7與IE其他版本以及其他瀏覽器的區別

最近做了一個需求,發現一個現象,跟大夥分享一下,如果有說得不對之處請大夥指正,需求大致如下:
界面展示一個Json列表,每一行都要根據Json中的數據做一些樣式上面的特殊處理。


起初也沒有考慮太多,直接就是在ajax完成的回調函數中添加如下代碼:
for(var i=0;i<json.rows.length;i++){
	if(json.rows[i].maxOvdTerms!="0"||json.rows[i].maxOvdDays!="0"){
		jQuery("#drawndnTable tr").eq(i).addClass("fontOrange");
	}
}


但代碼上線後發現,IE7下面就永遠只有第一條滿足條件的數據樣式被改變了,IE的其他版本和其他瀏覽器均正常。
這就鬱悶了,有想過會不會是回調函數中的JS代碼阻礙了Json數據的渲染,Json數據沒有沒有全部渲染出來而導致
jQuery無法正確獲取到對象,有了這個想法就立馬驗證了一把,雖然發現IE與chrome和firefox對Json的渲染有所不同,
驗證結果爲:
IE下面,是待得回調函數走完時纔會將Json數據渲染到界面,而chrome和firefox則是先渲染完再執行回調函數。
但這並不是問題所在。
之後無意之中在html源碼中看到有多個ID=drawndnTable的元素,而這正是我要找的元素,爲什麼會產生多個ID一樣的
元素在這裏不多說了,是UI產生的,而且這個drawndnTable標識是我必須需要的。
之後通過慢慢驗證發現,雖然html元素中的ID屬性是唯一的;
但jQuery通過ID屬性元素時,IE7和IE8、IE9、chrome、firefox有一定的區別
如:
當html界面的多個元素ID都爲A時;
在IE7下面通過jQuery("#A")的形式永遠只會獲取到衆多ID相同中第一個html元素;
而在其他版本和瀏覽器中,會將所有元素ID都等於A的了元素組裝成一個Array,就像下面這樣:
Html界面中有3個table元素,ID都爲B,每個表都有一行row,通過jQuery("#B tr")的形式就能
獲得3行,而如果是IE7下面則只能獲取到一行。
知道這一點後,我就將ID=drawndnTable改成name=drawndnTable,代碼改成如下方式
for(var i=0;i<json.rows.length;i++){
	if(json.rows[i].maxOvdTerms!="0"||json.rows[i].maxOvdDays!="0"){
		jQuery("table[name='drawndnTable']").eq(i).addClass("fontOrange");
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章