我想使用'On'函数来附加事件,因为其他事件已被弃用(live,delegate,click ...)。
但问题是:如果我们生成对象,我们需要在参数中使用选择器,这个参数是一个字符串!!
示例: (上下文:动态表)
//Wrong way
$("#dataTable tbody tr").on("click", function(event){
alert($(this).text());
});
//Good way
$("#dataTable tbody").on("click", "tr", function(event){
alert($(this).text());
});
现在,如果我想使用'find'方法以避免这种情况,我该怎么做
// ?? (find div)
$("#dataTable tbody").on("click", "tr > ul > li > ul > li > div", function(event){
alert($(this).text());
});
// What I would like to do
$("#dataTable tbody").on("click", $(this).find("div"), function(event){
alert($(this).text());
});
//and I don't want to do this :
$("#dataTable tbody").find('div').on("click", function(event){
alert($(this).text());
});
谢谢!
答案 0 :(得分:3)
工作相当于:
// What I would like to do
$("#dataTable tbody").on("click", $(this).find("div"), function(event){
alert($(this).text());
});
...是
// What I would like to do
$("#dataTable tbody").on("click", 'div', function(event){
alert($(this).text());
});
如果要在嵌套列表中定位div
,那么可能能够逃脱:
// What I would like to do
$("#dataTable tbody").on("click", 'ul ul div', function(event){
alert($(this).text());
});
...但这取决于你ul
中是否有其他 tbody
;你只需要在你的选择器中足够具体,以便从考虑中删除其他元素。很少需要像tr > ul > li > ul > li > div
那样具体,在这种情况下,最好将一个类应用于更接近div
(或div
本身)的元素,并且选择那个而不是。
另请注意,只有live()
折旧。在撰写本文时(1.7.2)delegate()
不是,但我相信它会在1.8中。
没有关于贬值click()
或它的快捷方式的说法。
答案 1 :(得分:1)
如果要选择嵌套列表中的DIV元素,那么这将是一种方法:
$( '#foo' ).on( 'click', 'ul ul div', function () {
但是,我建议上课。只需在DIV元素上设置一个类,然后:
$( '#foo' ).on( 'click', '.bar', function () {