2010-09-12 67 views
5

我有一個DOM元素,我想通過添加類「noEdit」排除.click函數我遇到的問題是其中一些元素有多個類即:jQuery和If語句不匹配,因爲多個類

<td class="firstCol noEdit"> // <-- wont work 
<td class="noEdit"> // <-- works fine 

而jQuery的:

$('td').click(function(){ 
    if($(this).attr('class') != "noEdit"){ 
     alert('do the function'); 
    }); 

想法?

回答

6

如果您使用attr()查詢class屬性,它只是將該值作爲單個字符串返回。然後,條件失敗關於你的第<td>因爲你的代碼將嘗試比較

"firstCol noEdit" != "noEdit" 

(因爲他們是不相等),返回真,使您的警報顯示。

你會想看看hasClass()功能來代替,該分析類列表,爲您和檢查給定類的屬性中的存在:

$('td').click(function() { 
    if (!$(this).hasClass("noEdit")) { 
     alert('do the function'); 
    } 
}); 
+0

這兩個很好的答案,但我更多地尋找這個,因爲我可以執行另一個函數與我的事件目標,有noEdit類。謝謝:) – 2010-09-12 01:28:05

+0

@Jascha:那將是三個很好的答案; Dave剛剛發佈;) – BoltClock 2010-09-12 01:29:50

4

如何使用屬性過濾器:

// != means 'not exactly matching', whereas *= means 'contains' 
$('td[class!=noEdit]').click(function(){ 
    alert('do the function'); 
}); 
+2

這似乎更清潔(if條件也不再必要,因爲OP只是想根據noEdit類來過濾東西)。 +1 – BoltClock 2010-09-12 01:22:05

+0

@Boltclock - 嘿,我意識到我在答案中留下了「if」陳述。真是太愚蠢了。 (現在修正了,但是......) – karim79 2010-09-12 01:27:31

+1

hasClass雖然速度可能會更快,但是......檢查速度與此相比是否值得。 – 2010-09-12 01:28:42

3

您可以使用jQuery's not() traversal來清理:

$('td').not('.noEdit').click(function() { 
    alert('do the function'); 
}); 
+0

這是可行的(可能)比上述兩種方法更快,因爲它使用的是jQuery的列表方法而不是sizzle選擇器引擎thingie。 +1 – karim79 2010-09-12 01:31:53

+0

@ karim79:'not()'不使用Sizzle?那很有意思! – BoltClock 2010-09-12 01:33:20

+0

@Boltclock - 我認爲是這種情況(想!=知道),但我懶得檢查在這個特定的時間點:) – karim79 2010-09-12 01:35:07