我有一个复选框列表。我想从每个复选框中获取下一个元素的文本,并将它们收集到一个新列表中。
如果有可能这样的话,我只是在徘徊:
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
不可接受......这可以吗?
答案 0 :(得分:1)
你可以将一些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
});
但是,因为.next()
和大多数jQuery操纵器一样,对匹配列表中的每个元素起作用并返回结果元素的列表,你可以这样做:
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(); });
我们可以在原始选择器中移动filter
以获得一些性能提升,特别是如果有很多未经检查的框:
var checked_all = $('brand-chk:checked')
.next()
.map(function() { return $(this).text(); });
最后,我们可以使用一些JS技巧来避免声明一个匿名函数:
var checked_all = $('brand-chk:checked').next().map($.fn.text);
但我不确定这比以前的版本更具可读性。