2011-04-28 228 views
1

我有一個表,其中每個td都有title,id和lang屬性。我想要所有匹配指定標題和ID的元素的所有lang。所以我試過了:jQuery:返回所有匹配的元素不僅一個匹配元素

var lossy = $("[title="+hicode+"][id="+hiwidth+"]").attr("lang"); 
alert(lossy); 

但是這個返回只是第一個匹配的元素。

任何想法返回數組或甚至字符串中的所有匹配的元素仍然可以。謝謝。

回答

3

您可以通過所有匹配的元素的使用jQuery的each()功能循環......

此代碼定義了一個數組,通過所有的匹配元素的循環,並增加了郎ATTR到陣列。

var results=new Array(); 

$("[title="+hicode+"][id="+hiwidth+"]").each(function(index){ 
    results[index] = $(this).attr("lang"); 
}); 

alert(results); 

而且,這裏是通過循環的div並收集ID ATTR一個例子:http://jsfiddle.net/tSmMj/

希望幫助:)

+0

謝謝。您的解決方案也適用於我。 – Protocole 2011-04-28 06:56:34

3

標準jQuery函數,$(selector),並返回所有匹配的元素。你的問題就在這裏:

[id="+hiwidth+"] 

你似乎有相同的id屬性的多個元素,並且是不允許的; id屬性在每個頁面中應該是唯一的,否則您將會得到未定義的行爲。在你的情況下,瀏覽器只返回你正在尋找的第一個包含id的元素。

因此,您需要修復您的HTML,然後修復您的選擇器以匹配您更正的HTML。

+1

謝謝。我將避免使用具有相同id屬性的多個元素。 – Protocole 2011-04-28 06:56:00

7

試試這個

var lossy = $("[title="+hicode+"][id="+hiwidth+"]").map(function() { return $(this).attr("lang"); }); 
alert(lossy); 

我使用的地圖功能轉換在陣列或陣列狀物體的所有項目,以項目的另一個數組。 (http://api.jquery.com/jQuery.map/

+0

來自jQuery doco:「由於返回值是一個jQuery封裝的數組,所以get()返回的對象與基本數組一起工作是非常普遍的。」你可能想在'.map()'調用的結尾添加一個'.get()'。 – vhallac 2011-04-28 06:38:13

+0

謝謝你們兩位。正如Dysaster所說,它在添加'.map()'之後起作用。 – Protocole 2011-04-28 06:55:01

+0

爲了得到一個真正的數組,你需要對.map()調用的結果做.toArray() – rynop 2014-09-18 17:58:57