尝试将其全部放入主选择器中:
Example: http://jsfiddle.net/8Tkex/
jQuery("a:not(div#mnuMain a)").live("click", function(event){
event.preventDefault();
alert("yes I got u");
});
EDIT:
使用原因.not()
不起作用的是当你使用 jQuery 时live()
方法,您实际上并没有将单击处理程序放置在元素上。相反,您将其放置在文档的根目录中。
这是有效的,因为页面上的所有单击(和其他)事件都会从实际接收事件的元素“冒泡”,一直到根,从而触发您放置在根的处理程序.live()
.
因为每次点击页面时都会发生这种情况,所以 jQuery 需要知道which项目收到点击,因此它可以确定要触发哪个(如果有)处理程序。它使用selector
你打电话时使用的.live()
.
所以如果你这样做:
jQuery("a").live("click", func...
...jQuery 比较"a"
每个选择器click
收到的事件。
所以当你这样做时:
jQuery("a:not(div#mnuMain a)").live("click", func...
...然后 jQuery 使用"a:not(div#mnuMain a)"
用于比较。
但如果你这样做
jQuery("a").not("div#mnuMain a").live("click", func...
...选择器最终看起来像"a.not(div#mnuMain a)"
,这不会匹配任何东西,因为没有.not
class on the <a>
元素。
我认为有些方法可能适用live()
, but .not()
不是其中之一。
如果您对 jQuery 对象的选择器是什么样子感到好奇,请将对象保存到变量中,将其记录到控制台并查看内部。你会看到selector
jQuery 使用的属性。
var $elem = jQuery("a").not("div#mnuMain a");
console.log( $elem );
...应该输出到控制台类似:
Object
context: HTMLDocument
length: 0
prevObject: Object
selector: "a.not(div#mnuMain a)" // The selector that jQuery stored
__proto__: Object
这是我从 Safari 控制台得到的输出。