【发布时间】:2012-05-13 23:26:55
【问题描述】:
我想使用“开启”功能附加一个事件,因为其他事件已被贬低(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 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());
});
谢谢!
【问题讨论】:
-
而不是
"tr > ul > li > ul > li > div",只需在 DIV 上设置一个类(顺便说一句,你不能在 TR 中直接有一个 UL)。此外,这闻起来就像您正在使用表格进行布局。 -
我不使用表格,我只是找到一种简单的方法来显示我的问题。当然,我可以使用 Class、Id... 但我想使用 {parent()、children()、closest()、...} 我该怎么做?
-
on()方法的第二个参数是一个选择器字符串。你不能在这里使用 jQuery 方法。它必须是一个字符串。所以要么'ul > li > ul > li > div',要么只是'ul ul div',正如我在回答中所写的那样。
标签: jquery events dynamic selector