2009-04-18 229 views
0

我有一個簡單的jQuery選擇器,選擇所有沒有noValidate類的鏈接。如果我只在一個項目上有一個類,它會很好,但如果我添加第二個類,它將不會再找到這個類。如何輕鬆檢查類是否包含noValidate而不是等於它。JQuery選擇器

電流選擇

$("a[class!=noValidate]").click(function() { 
    //Magic Happens 
}); 

文選:

<a href="#" class="noValidate"> 

失敗的

<a href="#" class="noValidate className2"> 

回答

6

你有什麼理由標記那些不應該被驗證的鏈接,而不是那些應該被驗證的鏈接?這將是更容易的第二種方式,但如果你需要堅持這個那麼你可以做這樣的事情:

$('a:not(.noValidate)').click(...); 

這是使用not選擇,只有選擇那些沒有階級鏈接「NOVALIDATE」。內部jQuery必須獲取頁面中的所有鏈接,以查看它是否具有該類,這不是非常有效。理想情況下,你只給一個類來鏈接,應該進行驗證,那麼你可以做:

$('a.validate').click(...); 

的效果好很多,不是嗎?速度也快得多。

+0

尼斯解釋,包括性能音符 – 2009-09-09 21:52:00

0

你能反其道而行之?

$("a:not[.noValidate]").click(...); 
// or 

$("a").click(function() { 
    //Magic Happens 
}); 
var noValidateEvents = $("a.noValidate").data("events"); 
$("a.noValidate").unbind('click', noValidateEvents.click[0]); 
2

嘗試:

$("a:not(a[class*=noValidate])").click(function() { }); 
0

改變你的選擇要做到這一點:

"a:not([class^='noValidate'])" 

^=將匹配具有類的元素屬性,它開始"noValidate"not()包裝它會否定比賽。

如果有可能的是,類"noValidate"可能在字符串中的不同位置試試這個:

"a:not([class*='noValidate'])" 

,這將在字符串中的任何位置匹配。最後一種方法更危險,因爲您有更大的潛力來無意中與其他事物相匹配。

2

您可以使用not選擇:

$("a:not(.noValidate)").click(function() { 
    //Magic Happens 
});