jQuery("a").not("div#mnuMain a").live("click", function(event){
event.preventDefault();
alert("yes I got u");
});
如何让它发挥作用?
答案 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");
});
试试这个