var allChecked = $('.inboxCheckbox:checked');
if(allChecked.length > 0){
var messageIds = new Array();
var parentRow = null;
allChecked.each(
function(){
parentRow = $(this).parents('tr');
if(!(parentRow.hasClass('gradeA'))){
parentRow.addClass('gradeA');
increaseUnreadMessage();
}
parentRow = null;
messageIds.push($(this).val());
}
);
}else{
showInsMessage('<b class="redTxt">Please Select At Least One Message</b>');
}
我有多行,每行都有一次复选框...如果选中复选框,我试图将等级A添加到每一行....如果已经有类等级A,我不想调用addClass ...当我选择多行时,它只将类添加到一行。这是否意味着
假设我有三行,每行有复选框,我选择每个复选框,当我运行
$(':checked').each(
$(this).parents('tr')
)
选择带有复选框的所有行或仅选择特定的父行....我的假设是它只给出了特定的父行.....如果它给出特定的行那么它应该工作..但是一旦我将一个类添加到父行并移动到另一行,那么parentRow.hasClass('gradeA')返回true ...如果它用复选框检查所有行,我现在很困惑那么有没有办法选择特定的父行......
感谢您阅读
答案 0 :(得分:1)
很高兴看到标记,是否有更多的表嵌套?
然而,
parentRow = $(this).closest('tr');
应该是更好的选择。
答案 1 :(得分:0)
API说.parents()方法搜索元素的所有祖先。 .parent()只在DOM树上运行一个级别。 如果您的复选框是'tr'的直接子(不是深层后代),那么您可以尝试
parentRow = $(this).parent('tr');
答案 2 :(得分:0)
var messageIds = [];
$('tr.youTrs').toggleClass('gradeA', function () {
var checkbox = $(this).find('.inboxCheckbox');
if (checkbox.is(':checked')){
messageIds.push(checkbox.val());
return true;
}
else{
showInsMessage('<b class="redTxt">Please Select At Least One Message</b>');
return false;
}
});
答案 3 :(得分:0)
您的代码应该有效。我怀疑问题正在发生,因为你的函数increaseUnreadMessage()
正在抛出一个错误,导致跳过each()
循环的其余部分。
但是,要回答您的具体问题:是的,您可以选择包含已选中复选框的所有行(<td>
s)。使用jquery的:has selector,如下所示:
var allCheckedRows = $('tr:has(.inboxCheckbox:checked)');
当然,您可以使用addClass()
将您的类名应用于所有这些:
allCheckedRows.addClass('gradeA');
当然,你的each()
循环中还有其他事情发生,所以你可能无法完全抛弃each()
。正如我上面所说,你的代码可以运行......但是这样的东西可能更干净,更容易理解。
var messageIds = new Array();
var allCheckedRows = $('tr:has(.inboxCheckbox:checked)');
allCheckedRows.addClass('gradeA');
allCheckedRows.find('.inboxCheckbox').each( function() {
var cb = $(this);
increaseUnreadMessage();
messageIds.push( cb.val() );
});
if( messageIds.length === 0 ) {
showInsMessage('<b class="redTxt">Please Select At Least One Message</b>');
}