2014-11-06 3 views
-2

Я пишу сценарий, который будет выполняться, когда мой body элемент не получил какой-либо из следующих классов:Проиграл в JavaScript сравнения

А или В или С и d

I попробовал это, но это, кажется, не сделать трюк:

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() {// здесь}); не уверен, что это так. Поделитесь своим кодом через jsFiddle. посмотрите на это: http://jsfiddle.net/codeSpy/3yo670b1/, ваш код работает отлично. –

+0

На самом деле это не работает, посмотрите на это: http://jsfiddle.net/orjan/cmx3fa3z/ – OBD

+0

Вы сказали, что ваш код будет выполняться, если ни один из классов a, b, c, d не присутствует. Поэтому попробуйте следующее: http://jsfiddle.net/codeSpy/p5e67dw0/ –

ответ

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)

Над оператором ИЛИ || означает, что как только он попадает в настоящую оценку, он будет выполнять свой if -блок.

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

Здесь оператор И && означает, что как только вы нажмете false оценки, вы блокируете не будет выполнена.

Вы хотите, чтобы последнее произошло, поскольку вы хотите, чтобы у него не было ни одного из классов. Узнайте, как играть с этими операторами, поскольку они могут быть очень запутанными. Пока вы помните, что оператор И будет выполняться только в том случае, если все утверждения истинны, и оператор OR будет выполняться только в том случае, если одно из операторов истинно. Вложенные операторы работают одинаково, поэтому if((a = b && b = c) || (a = c)) будет выполняться, если a, b и c являются одинаковыми OR, когда a и c являются одинаковыми, но не тогда, когда a и b одинаковы или a и c одинаковы.

Подробнее о выражении и операторов (в частности побитовое и должен прочитать): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Bitwise_operators

+0

Увы, Í даже не может сравниться с OR: http: // jsfiddle.net/orjan/swhdfdox/ – OBD

+0

@OBD Опять же, это потому, что вы хотите, чтобы классы _no были найдены_, поэтому вам нужен оператор AND. ИЛИ, если вы хотите, чтобы хотя бы один из них был истинным, что - в вашей скрипке - это случай, когда применяется класс b. В вашей скрипке говорится: 'if (NOT hasClass (a) ИЛИ NOT hasClass (b))', который оценивается как 'if (true OR false)', который, в свою очередь, возвращает true, потому что он истинен. С AND оно становится 'if (NOT hasClass (a) AND NOT hasClass (b))', который оценивается как 'if (true AND false)', что означает, что не все утверждения истинны и блок пропускается. – somethinghere

Смежные вопросы