2012-11-07 216 views
3

我在jQuery中使用$ .find()方法,我無法獲得所有匹配選擇器條件的結果。jQuery find()只返回第一個匹配的結果?

這是我的HTML

<div class="something"> 
<label> Hello </label> 
<div class="selse"> 
    <label> Hi </label> 
    <label class="imp"> This is </label> 
    <label class="imp"> Nooo </label> 
</div> 
<label class="imp"> Sparta </label> 
<label class="imp"> Right ? </label> 
</div> 

<div class="something"> 
<label> Hell No </label> 
<div class="selse"> 
    <label> Hi </label> 
    <label class="imp"> Cant </label> 
</div> 
<label class="imp"> touch </label> 
<label class="imp"> this </label> 
<label class="imp"> MC </label> 
</div>​ 

所以當我做下面的JS

$("div.something").each(function(index) { 
    alert(index + ': ' + $(this).find("label.imp").html()) 
    });​ 

我希望它會給我2個警報。一個與0. This is, Nooo, Sparta, Right ?和另一個與1. Cant, touch, this, MC。但我只有0. This is1. Cant

我試着用數組在同一個函數像這樣

$("div.something").each(function(index) { 
    var arr=[] 
    arr = $(this).find("label.cidForm").html(); 
    alert(arr); 
    });​ 

沒有我得到與他們「未定義」警告框。這兩種情況我做錯了什麼?我只想要一個包含label.imp元素中的所有值的數組。

這裏是一個JSFiddle,我也是一樣的。 http://jsfiddle.net/WPeKF/1/

+0

嘗試描述你想要做什麼,你已經不是如何做是錯誤的。 – feeela

+0

我在帖子結尾處提到過它。沒有包含在主題中。抱歉。 – Pradep

回答

10

.html()和其他getter方法僅返回第一個匹配元素的值。考慮到這一點,我認爲你可以找出需要做出的邏輯改變。

小提琴:http://jsfiddle.net/WPeKF/2/

代碼:

var arr = $("div.something").map(function(){ 
    return $(this).find("label.imp").map(function(){ 
     return $(this).html(); 
    }).get().join("");   
}).get(); 
console.log(arr); 
+0

哦。我只專注於find()方法。謝謝(你的)信息。 – Pradep

+1

嵌套映射的唯一目的是將每個div內的div的字符串連接到一個字符串中。爲了比較,http://jsfiddle.net/WPeKF/3/ –

0

這應該做的伎倆:

var myArray = $("div.something label.imp").map(function(index) { 
    return $(this).html(); 
});​ 
+0

將任何'.imp'插入到單個數組中。但是你需要有一個父數組,用於存儲每個'.something'('.imp'數組)。 – feeela