2015-03-13 2 views
1

Почему: скрытый селектор возвращает true на пустой элемент?скрыт selector return true on blank element

<span class="xxx"> 
    <span class="a"/> 
    <span class="b"/> 
</span> 

<span class="yyy" style="display: none;"> 
    <span class="a"/> 
    <span class="b"/> 
</span> 

console.log($('span.xxx').is(':hidden')); 
console.log($('span.yyy').is(':hidden')); 

печати два истинно

Как я могу выбрать только элементы с дисплеем: Нет?

+1

Side Примечание: Если предположить, что вы используете HTML, а не XHTML, разметка является недействительной. Элементы 'span' не являются элементами void, поэтому вы не можете использовать синтаксис' 'с ними. Он ** должен ** быть ''. Только ** void ** элементы (например, '
') могут опционально иметь '/' перед '>'. (Но не потому, что эти промежутки скрыты.) –

+0

ОК, понимаю, но как я могу выбрать id = xxx? Я использую модуль, который печатает эту структуру - «пустой» или скрытый диапазон –

ответ

2

Это потому, что span имеет 0 размеры высоты/ширины из-за отсутствия содержания. Это означает, что элемент технически невидим, несмотря на то, что на нем не установлены ни display: none, ни visibility: hidden.

По the documentation:

предполагается Элемент будет скрыт, если он или любой из его родителей не потребляет место в документе.

После того, как вы добавите видимое содержимое к элементу он работает правильно:

console.log($('span.xxx').is(':hidden'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span class="xxx"> 
 
    <span class="a">A</span> 
 
    <span class="b">B</span> 
 
</span> 
 

 
<span class="yyy" style="display: none;"> 
 
    <span class="a">A</span> 
 
    <span class="b">B</span> 
 
</span>

+0

, пожалуйста, посмотрите мой комментарий в первом сообщении. я не могу изменить структуру ... –

+0

@ Unknow.Vagrant: Рори ответил * на вопрос, который вы задали *. Если у вас другой вопрос, задайте другой вопрос. –