jQuery - 获取数组中元素的子元素

时间:2013-12-24 16:05:29

标签: javascript jquery

我有以下HTML:

<div id="div1">
   <span class="icon"></span>
   <span class="text"></span>
</div>
<div id="div2">
   <span class="icon"></span>
   <span class="text"></span>
</div>
<div id="div3">
   <span class="icon"></span>
   <span class="text"></span>
</div>
<div id="div4">
   <span class="icon"></span>
   <span class="text"></span>
</div>

然后我在JavaScript中有一些业务逻辑确定要放入数组的div元素:

var arr = [];
for(i = 1; i <= 4; i++) {
  if(someExpression) arr.push($("#div" + i));
}

问题:是否可以从arr中的元素获取所有带有“text”类的跨度(不使用$(arr).eachfor循环)?

我在下面尝试了一些简单的事情,但它们不起作用..

$(arr).find(".text");
$(".text", $(arr));
$(".text", arr);

由于

3 个答案:

答案 0 :(得分:3)

您可以使用伪装循环:

var texts = arr.map(function(div){ return div.find('.text') });

从现有的arr数组开始,实际上没有办法避免某种循环。

但请注意,这样做会更简单

var texts = $('#div1,#div2,#div3,#div4').find('.text');

或者如果您没有ID为div的其他div:

var texts = $('[id^=div] .text');

答案 1 :(得分:2)

你有一个jQuery对象数组,这就是为什么你不能从数组中创建一个jQuery对象。

将元素放在数组中:

var arr = [];
for(i = 1; i <= 4; i++) {
  if(someExpression) arr.push($("#div" + i)[0]);
}

然后你可以从数组中创建一个jQuery对象,使用find可以很好地找到元素:

var texts = $(arr).find(".text");

演示:http://jsfiddle.net/Guffa/Wu92L/

答案 2 :(得分:-1)

为什么不选择所有div.text?

var arr = $(".text");