3

我想使用“开启”功能来附加一个事件,因为其他事件已被贬值(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());
        });

谢谢 !

4

2 回答 2

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在嵌套列表中定位 's,那么您可能能够逃脱:

// What I would like to do
$("#dataTable tbody").on("click", 'ul ul div', function(event){
    alert($(this).text());
});

...但这取决于您是否有其他 ; 您只需要在选择器中足够具体,即可将其他元素从考虑中删除。很少需要像 一样具体,在这种情况下,最好将一个类应用于更接近(或自身)的元素,然后围绕它进行选择。 ultbodytr > ul > li > ul > li > divdivdiv

另请注意,它只是live()折旧的。在撰写本文时 (1.7.2)delegate()不是,尽管我相信它会在 1.8 中。

没有谈论贬值click()或它的捷径对应物。

于 2012-05-04T12:03:56.543 回答
1

如果要选择嵌套列表中的 DIV 元素,那么这将是一种方法:

$( '#foo' ).on( 'click', 'ul ul div', function () { 

但是,我推荐课程。只需在您的 DIV 元素上设置一个类,然后:

$( '#foo' ).on( 'click', '.bar', function () { 
于 2012-05-04T13:38:08.110 回答