使用jQuery委托事件处理程序时,如何获取后代选择器?

时间:2016-09-09 17:53:00

标签: javascript jquery javascript-events event-handling

使用jQuery委托事件处理程序时,如何获取后代选择器?例如,在下表中,我想选择单击的表行:

<div id='timeline'>
    <table>
        <tr data-somedata=5><td>First Row</td></tr>
        <tr data-somedata=100><td>Another row</td></tr>
    </table>
</div>

该表是动态添加的,因此我使用委托的事件处理程序。

$("#timeline").on('click', $("tr"), function(event){
    console.debug($(this));       // This selects the entire #timeline
    console.debug(event.target);  // This selects the <td> element, not the <tr>
});

如何使用上面委托的事件处理程序选择tr元素?

此外,如果某人有一个只有JavaScript的解决方案,那也会很棒。

2 个答案:

答案 0 :(得分:1)

我把解决方案(我在评论部分中提到的)用于帮助未来的读者。

您已将jQuery object作为selector传递,您需要将代码更改为以下内容,然后$(this)将成为tr

$('#timeline').on('click', 'tr', function(event){
    var $tr = $(this);

    // play with $tr
});

有关此on的更多信息:.on()

答案 1 :(得分:1)

代码中的错误很少。

>>> x = np.arange(5)
>>> np.in1d(x, [3,4])
array([False, False, False,  True,  True], dtype=bool)
>>> np.argwhere(_)
array([[3],
       [4]])

除了你的代码是好的

&#13;
&#13;
1.its `timeline` not `#timeline`
2.you can simply refer as tr it should not be $('tr')
&#13;
$("timeline").on("click","tr",function(){
   alert($(this).attr('data-somedata'));
});
&#13;
&#13;
&#13;