jquery .not()不能使用live()

时间:2011-08-19 20:40:47

标签: javascript jquery

我在页面中添加了一些带有ajax的dom,我试图通过.not()排除选择的结果,但它不适用于我。

以下是一个简单示例:

HTML:

<div class="list-item">
        <span class="item-title">Some title</span>
        <span class="edit fr"><a href="Edit link">Edit</a></span>
        <span class="trash fr"><a href="#trashit" rel="trash">Trash</a></span>
        <span class="live fr active"><a href="#liveit" rel="publish">Live</a></span>
        <span class="draft fr"><a href="#draftit" rel="draft">Draft</a></span>

 </div>

jQuery的:

jQuery('.list-item span a').not('.list-item span.edit a').live('click', function(){

       //do stuff
});

观察:

  1. 如果我删除代码的.not()部分,则选择适用于live()
  2. 如果我使用.not(),但将live()替换为click()则代码可以正常运行。
  3. 但我需要使用.not()(包括带有ajax的dom)运行.edit(排除live();类)

    提前致谢!

3 个答案:

答案 0 :(得分:8)

根据the .live() docs

  

查找要发送到.live()的元素不支持DOM遍历方法。相反,应始终在选择器之后直接调用.live()方法,如上例所示。


因此,将类排除添加到选择器:

jQuery('.list-item span:not(.edit) a').live('click', function(){
    //do stuff
});

答案 1 :(得分:3)

尝试

$('.list-item span:not(.edit) a').live(...);

正如其他人指出的那样,实时不支持DOM遍历。 live也有其他一些限制,请查看文档。

答案 2 :(得分:0)

jQuery('.list-item').filter(function(){

return $(this).not("span.edit a")
})
.live('click', function(){

       //do stuff
});