为什么我的代码只适用于Jquery中的第一个tr?

时间:2011-08-23 18:32:49

标签: jquery

jQuery("#contentItems table.tablesorter tbody tr td:eq(3)").live('mousedown', function (e) {
        var tr = jQuery(this);
        tr.fadeTo('fast', 0.5);
});

基本上,当我点击它们时,我希望表格中每行的第4个单元格淡出一点。但上面的代码似乎只适用于第一个tr的第四个单元格。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

无论您是否将tr指定为祖先,

:eq(3)都与第3 td完全匹配。您想要使用nth-child选择器。我还建议您使用delegate,因为它更快更清洁:

请参阅http://jsfiddle.net/At4bW/

答案 1 :(得分:0)

使用delegate

尝试此操作
$("#contentItems table.tablesorter tbody tr").delegate('td:eq(3)', 'mousedown', function(e){
        $(this).fadeTo('fast', 0.5);
});

或者使用基于1个索引的nth-child选择器

$("#contentItems table.tablesorter tbody tr td:nth-child(4)").live('mousedown', function(e){
        $(this).fadeTo('fast', 0.5);
});

答案 2 :(得分:0)

为什么#contentItems table.tablesorter tbody tr td会匹配表格中所有行中的所有td,然后:eq(3)将匹配该集合中的第4个td

请改为尝试:

jQuery("#contentItems table.tablesorter tbody tr")
    .delegate("td:eq(3)", 'mousedown', function () {
        var tr = jQuery(this);
        tr.fadeTo('fast', 0.5);
    }
); 

答案 3 :(得分:0)

试试这个:

jQuery("#contentItems table.tablesorter tbody tr").each(jQuery("td:eq(3)", this).live('mousedown', function (e) {
     var tr = jQuery(this);
     tr.fadeTo('fast', 0.5);
 }))

这会将内部jQuery选择器(获取第4个td元素)应用于每一行,然后应用你的mousedown。 (注意,语法/拼写错误可能需要进行一些编辑)