2010-09-03 69 views

回答

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()米ethod,你實際上並沒有在單元上放置點擊處理程序。而是將其放在文檔的根目錄下。

這是有效的,因爲頁面上的所有點擊(和其他)事件都會從實際接收事件的元素「冒泡」,一直到根,從而觸發您放置在根上的處理程序,使用.live()

因爲這發生在頁面上的每一次點擊,jQuery需要知道哪個項目收到點擊,因此它可以確定觸發哪個(如果有)處理程序。它使用您在撥打.live()時使用的selector來執行此操作。

所以,如果你這樣做:

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)",這將不符合任何東西,因爲有的<a>元件沒有.not類。

我認爲有些方法可以與live()一起使用,但.not()不是其中之一。

如果你對你的jQuery對象的選擇器是什麼樣子感興趣,請將你的對象保存到一個變量中,將其記錄到控制檯並查看內部。你會看到jQuery使用的selector屬性。

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瀏覽器的控制檯中看到。

+0

您好....你能告訴我,爲什麼它不工作? – 2010-09-05 04:12:00

+0

@cloudlight - 當然。我會在幾分鐘內將它發佈在我的答案中。 :o) – user113716 2010-09-05 11:51:36

+0

非常感謝patrik dw這麼好的解釋。 – 2010-09-05 18:08:29

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

試試這個