如何将转换应用于jQuery匹配的每个元素并满足某些条件
我有一个复选框列表。我想从每个复选框中获取下一个元素的文本,并将它们收集到一个新列表中 我只是想知道这样的事情是否可能:如何将转换应用于jQuery匹配的每个元素并满足某些条件,jquery,Jquery,我有一个复选框列表。我想从每个复选框中获取下一个元素的文本,并将它们收集到一个新列表中 我只是想知道这样的事情是否可能: var checked_all = $('.brand-chk').each().is(':checked') ? $(this).next().text() : continue; 实际上,我想这样做: var checked_all = []; $('.brand-chk').each(function(e) { if($(this).is(':checked')
var checked_all = $('.brand-chk').each().is(':checked') ? $(this).next().text() : continue;
实际上,我想这样做:
var checked_all = [];
$('.brand-chk').each(function(e) {
if($(this).is(':checked')) {
checked_all.push($(this).next().text());
}
});
实际上,语法不正确,
continue
在那里是不可接受的。。。这能做到吗 您可以将一些jQuery函数链接在一起,得到如下结果:
var checked_all = $('.brand-chk') // match all checkboxen
.filter(':checked') // now let's only look at checked ones
.map(function() {
return $(this).next().text(); // take next().text() from each element
});
但是,由于与大多数jQuery操纵器一样,.next()
,可以处理匹配列表中的每个元素并返回结果元素的列表,因此您只需执行以下操作:
var checked_all = $('brand-chk')
.filter(':checked')
.next() // get list of next() applied to each element in the original list
.map(function() { return $(this).text(); });
我们可以在原始选择器内移动过滤器
,以获得一些性能增益,特别是如果有很多未选中的框:
var checked_all = $('brand-chk:checked')
.next()
.map(function() { return $(this).text(); });
最后,我们可以使用一些JS技巧来避免声明匿名函数:
var checked_all = $('brand-chk:checked').next().map($.fn.text);
但是我不确定这是否比以前的版本更可读。为什么你要试图超级混淆你的代码?你的意思是
$('.brand chk:checked')。each()
?@LightnessRacesinOrbit,我真的不知道,我感觉到有些东西可以减少代码,因为我倾向于选择短代码,尤其是客户端。。blgt给了我一个最好的选择,我不敢相信我竟然没有想到。干杯我必须承认,你知道你的jquery!太棒了,谢谢你