我有以下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).each
或for
循环)?
我在下面尝试了一些简单的事情,但它们不起作用..
$(arr).find(".text");
$(".text", $(arr));
$(".text", arr);
由于
答案 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");
答案 2 :(得分:-1)
为什么不选择所有div.text?
var arr = $(".text");