jQuery find()只返回第一个匹配的结果?

时间:2012-11-07 21:56:11

标签: javascript jquery html 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/

2 个答案:

答案 0 :(得分:11)

.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);

答案 1 :(得分:0)

这应该可以解决问题:

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