2014-11-06 90 views
-2

我正在寫一個腳本來執行,當我body元素沒有得到任何以下類:迷失在JavaScript比較

A或B或C和d

我試過,但它似乎並沒有這樣的伎倆:

if ((!$('body').hasClass('a')) || (!$('body').hasClass('b')) || ((!($('body').hasClass('c')) && (!$('body').hasClass('d'))))) { 

} 

UPDATE

這似乎工作:

if (!($('body').hasClass('a') || $('body').hasClass('b') || $('body').hasClass('c') && $('body').hasClass('d'))) { 

} 
+0

緊急援助來到我的腦海:嘗試寫在$代碼( document).ready(function(){// here});不知道是否是這種情況。通過jsFiddle分享你的代碼。看看這個:http://jsfiddle.net/codeSpy/3yo670b1/,你的代碼在這裏工作得很好。 – 2014-11-06 10:52:26

+0

它並不真正的工作,看看這個: http://jsfiddle.net/orjan/cmx3fa3z/ – OBD 2014-11-06 11:28:14

+0

你說你的代碼將執行時,任何類a,b,c,d不存在。所以試試這個:http://jsfiddle.net/codeSpy/p5e67dw0/ – 2014-11-06 11:36:44

回答

0

使用

$(function(){ 
 
    if ((!$('body').hasClass('a')) || (!$('body').hasClass('b')) || !($('body').hasClass('c') && $('body').hasClass('d'))) { 
 

 
} 
 

 
});

0

您正在尋找可是沒有任何一個類的,所以你需要使用&&身體。繼承人發生了什麼:

if(hasclass(a) || hasclass(b)) = if(true OR false) = if(true)

以上OR運算符||意味着一旦它擊中一個真實的評估,它會執行你if - 塊。

if(hasclass(a) && hasclass(b)) = if(true AND false) = if(false)

這裏與運算&&意味着一旦你打一個false評價,你擋住不會被執行。

你想要發生的最後一件事情,因爲你想要它沒有任何類。瞭解如何與這些運營商一起玩,因爲他們可能會非常混亂。只要您記得AND運算符只有在所有語句都爲真時纔會執行,並且OR運算符只有在其中一個語句爲真時纔會執行。嵌套操作符的工作原理是相同的,所以如果a,b和c相同或者a和c相同時,則執行if((a = b && b = c) || (a = c)),但在a和b相同或a和c相同時不執行。

更多的表達和運營商(特別是按位和必讀):https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Bitwise_operators

+0

唉唉甚至不能得到或比較工作: http:// jsfiddle。net/orjan/swhdfdox/ – OBD 2014-11-06 11:32:12

+0

@OBD再說一次,這是因爲你想找到_no類,所以你需要AND運算符。或者,如果你希望其中的一個至少是真實的,那麼 - 在你的小提琴中 - 是應用b類的情況。你的小提琴說'如果(不是hasClass(a)或不是hasClass(b))'被評估爲'if(true或false)',反過來返回true,因爲一個是真的。使用AND,它變成了'if(不是hasClass(a)AND not hasClass(b))',它被評估爲'if(true&false)',這意味着不是所有的語句都是真的,並且塊被跳過。 – somethinghere 2014-11-06 12:50:08