2015-10-23 2 views
-1

Я хочу использовать OR для селекторов в jquery.ИЛИ селекторы не работают правильно в jquery

Я пишу этот код:

$("#x").css('display') == 'none' || $("#y").css('display') == 'none' 

Но смотрите этот ответ: https://stackoverflow.com/a/2263976/1407491

Я перепишем этот код будет так:

$("#x, #y").css('display') == 'none' 

Этот код отлично работает об этом примере кода:

<div id="x"></div> 
<div id="y"></div> 

return false и это OK.

<div id="x" style="display:none"></div> 
<div id="y" style="display:none"></div> 

возвращение правда, и это OK.

<div id="x" style="display:none"></div> 
<div id="y"></div> 

возвращение правда, и это OK.

Но не работает об этом образце:

<div id="x"></div> 
<div id="y" style="display:none"></div> 

возвращения ложные, но это NOT OK!

Пример кода здесь: http://jsfiddle.net/NabiKAZ/qpquuhxd/

Почему это? и что такое чистый код?

+2

Все Геттеры в JQuery только посмотреть на первый выбранный элемент. Вы работаете с двумя, и полагаете, что он смотрит на оба, что, конечно же, даст неожиданные результаты, если вы не считаете, что он смотрит только на первый. –

+0

@KevinB, и есть ли короткий код без оператора '' '? –

+2

Единственный другой вариант - использовать селектор: visible в сочетании с тестированием длины возвращаемой коллекции, но ваше оригинальное решение будет более эффективным. –

ответ

1

Если вы используете несколько селекторов, использовать каждый:

$("#x, #y").each(function(){  
 
    if ($(this).css('display') == 'none'){ 
 
    $("#cont").append($(this).attr("id")+"'s display is none"); 
 
    }  
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="cont"> 
 
    <div id="x">Visible div</div> 
 
    <div id="y" style="display:none">test</div> 
 
</div>

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