.not()与.live()不起作用

时间:2010-09-03 12:00:18

标签: jquery-selectors jquery

jQuery("a").not("div#mnuMain a").live("click", function(event){
                event.preventDefault();
                alert("yes I got u");                 
        });

如何让它发挥作用?

2 个答案:

答案 0 :(得分:6)

尝试将其全部放入主选择器:

示例: http://jsfiddle.net/8Tkex/

jQuery("a:not(div#mnuMain a)").live("click", function(event){
            event.preventDefault();
            alert("yes I got u");                 
    });

修改

使用.not()的原因不起作用的是当你使用jQuery的live()方法时,你实际上并没有在元素上放置点击处理程序。相反,你将它放在文档的根目录。

这是有效的,因为页面上的所有单击(和其他)事件都从实际接收到事件的元素“冒泡”,一直到根,从而使用{{激发您放置在根目录的处理程序1}}。

因为页面上的每次点击都会发生这种情况,所以jQuery需要知道哪个项目收到了点击,这样就可以确定要触发的处理程序(如果有的话)。它使用您调用.live()时使用的selector来执行此操作。

所以,如果你这样做了:

.live()

... jQuery将jQuery("a").live("click", func... 选择器与收到的每个"a"事件进行比较。

所以当你这样做时:

click

...然后jQuery使用jQuery("a:not(div#mnuMain a)").live("click", func... 进行比较。

但如果你这样做

"a:not(div#mnuMain a)"

...选择器最终看起来像jQuery("a").not("div#mnuMain a").live("click", func... ,这与任何内容都不匹配,因为"a.not(div#mnuMain a)"元素上没有.not

我认为某些方法可能适用于<a>,但live()不是其中之一。

如果您对jQuery对象的选择器看起来很好奇,请将对象保存到变量,将其记录到控制台并查看内部。您将看到jQuery使用的.not()属性。

selector

...应该输出到控制台:

var $elem = jQuery("a").not("div#mnuMain a");

console.log( $elem );

这是我从Safari的控制台获得的输出。

答案 1 :(得分:0)

jQuery("a:not(div#mnuMain a)").live("click", function(event){
            event.preventDefault();
            alert("yes I got u");                 
    });

试试这个