似乎无法正确获取<i>
标识符,因此我可以删除/添加类。这就是我所拥有的,但它无法改变<i>
的类。因为工作正常,所以不要理会数组和其他东西。
JS:
$('#datatable').on('click', 'tr td:first-child', function () {
// add/remove checked, active class, and id from array
var id = $(this).parents('tr').attr('id');
if ( $.inArray(id, selected) !== -1 )
{
$(this+ ' i').removeClass('fa-square-o').addClass('fa-check-square');
$(this).parents('tr').addClass("active");
//add to array
selected.push( id );
}
else {
$(this+ ' i').removeClass('fa-check-square').addClass('fa-square-o');
$(this).parents('tr').removeClass("active");
//remove from array
selected.splice($.inArray(id, selected),1);
}
//update count
$("#dtCount").html(selected.length);
});
HTML:
<table id="datatable">
<tr id="dtrow_1" class="odd">
<td class=" center">
<i class="fa fa-square-o dt-checkboxes"></i>
</td>
.......
修改
每个人似乎都给出了相同的答案,但这没有做任何事......
if ( $.inArray(id, selected) !== -1 )
{
$(this).find('i').removeClass('fa-square-o').addClass('fa-check-square');
$(this).parents('tr').addClass('active');
//add to array
selected.push( id );
}
else {
$(this).find('i').removeClass('fa-check-square').addClass('fa-square-o')
$(this).parents('tr').removeClass('active');
//remove from array
selected.splice($.inArray(id, selected),1);
}
答案 0 :(得分:3)
你需要找到i
元素,它是当前td
的后代所以
变化
$(this+ ' i')
到
$(this).find('i');// or $('i', this)
您的选择器$(this+ ' i')
执行[object HTMLDivElement] i
,因为this
是dom元素参考
var selected = []
$('#datatable').on('click', 'tr td:first-child', function () {
// add/remove checked, active class, and id from array
var id = $(this).parents('tr').attr('id');
//this condition is wrong
if ($.inArray(id, selected) === -1) {
$(this).find(' i').removeClass('fa-square-o').addClass('fa-check-square');
$(this).parents('tr').addClass("active");
//add to array
selected.push(id);
} else {
$(this).find(' i').removeClass('fa-check-square').addClass('fa-square-o');
$(this).parents('tr').removeClass("active");
//remove from array
selected.splice($.inArray(id, selected), 1);
}
//update count
$("#dtCount").html(selected.length);
});
演示:Fiddle
答案 1 :(得分:1)
i
标记是当前td(事件源)的后代。您可以使用
jQuery( selector [, context ] )或find()
更改
$(this+ ' i').removeClass('fa-square-o').addClass('fa-check-square');
要
$('i', this).removeClass('fa-square-o').addClass('fa-check-square');
或者
$(this).find('i').removeClass('fa-square-o').addClass('fa-check-square');
答案 2 :(得分:0)
使用.find
$('#datatable').on('click', 'tr td:first-child', function () {
// add/remove checked, active class, and id from array
var id = $(this).parents('tr').attr('id');
if ( $.inArray(id, selected) !== -1 )
{
$(this).find('i').removeClass('fa-square-o').addClass('fa-check-square');
$(this).parents('tr').addClass("active");
//add to array
selected.push( id );
}
else {
$(this).find('i').removeClass('fa-check-square').addClass('fa-square-o');
$(this).parents('tr').removeClass("active");
//remove from array
selected.splice($.inArray(id, selected),1);
}
//update count
$("#dtCount").html(selected.length);
});
有关.find()
的详细信息,请参阅this。
答案 3 :(得分:0)
这是正确的解决方案。您应该首先将html对象转换为jQuery对象&amp;而不是尝试将字符串添加到html对象。然后在里面寻找“i”标签。
$('#datatable').on('click', 'tr td:first-child', function () {
// add/remove checked, active class, and id from array
var id = $(this).parents('tr').attr('id');
if ( $.inArray(id, selected) !== -1 )
{
$(this).find('i').removeClass('fa-square-o').addClass('fa-check-square');
$(this).parents('tr').addClass("active");
//add to array
selected.push( id );
}
else {
$(this).find('i').removeClass('fa-check-square').addClass('fa-square-o');
$(this).parents('tr').removeClass("active");
//remove from array
selected.splice($.inArray(id, selected),1);
}
//update count
$("#dtCount").html(selected.length);
});