2015-11-06 88 views
-2

我在我的html中有幾個帶有id的div元素。在DOM中循環元素的ID

這是我的JS:

var frameList = $('div'); 

for(i = 0; i < frameList.length; i++) { 
    console.log(frameList[i].attr('id')); 
}; 

也就是說,我得到的元素列表,然後遍歷每個元素並試圖獲得其ID。這不起作用,我明白爲什麼。我怎麼能使它工作?

回答

1

通常匹配jQuery選擇該元素的集合所使用的每個重複,在這裏this綁定到匹配的當前元素迭代期間設置

$('div').each(function(){ 
    console.log(this.id); 
}); 

雖然你的具體例子...

這裏的問題是,當你使用數組索引訪問frameList,你正在訪問jQuery創建的psuedo數組。這個底層數組只保存匹配選擇器或包含在jQuery對象中的一組元素。

這些元素僅公開本機API。這裏的一個選擇是訪問這些元素上的本機ID。

console.log(frameList[i].id); 

另一種選擇是使用jQuery的功能eq得到jQuery對象爲元素,然後用attr

console.log(frameList.eq(i).attr('id')); 
1

frameList[i]不是jQuery對象,因此.attr()未定義。

要麼frameList[i].idframeList.eq(i).attr("id")應工作,雖然:

var frameList = $('div'); 
 

 
for(i = 0; i < frameList.length; i++) { 
 
    console.log(frameList[i].id); 
 
    console.log(frameList.eq(i).attr("id")); 
 
};
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="one"></div> 
 
<div id="two"></div> 
 
<div id="three"></div> 
 
<div id="four"></div>

+1

使用'.attr('id')'是一個jQuery代碼異味 – Alnitak

1

現在你正在使用jQuery的你應該使用jQuery.each:

$('div').each(function() { 
    console.log(this.id); 
}); 
+0

謝謝,但這個問題真的是另一個副本嗎? – jgozal

+0

@jgozal您的問題與其他問題中的OP完全相同。我提供的解決方案是解決您的問題的另一種解決方案,如果有任何您應該接受TravisJ的答案作爲您的問題的答案。他至少試圖解釋發生了什麼:-) – andlrc

+0

謝謝你的建議。我讚賞所有其他答案,有時希望我可以批准所有答案。但我在我的問題中說過,我明白了爲什麼我的代碼無法正常工作,因此無需解釋,我認爲您的解決方案最簡單,最優雅,因爲它避免了創建新變量。 – jgozal