2015-03-13 51 views
1

爲什麼隱藏選擇器在空元素上返回true?是隱藏選擇器返回true爲空元素

<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

邊注:假設你正在使用的HTML,XHTML不,你的標記是無效的。 'span'元素不是void元素,所以你不能對它們使用''語法。它**必須是** '。只有** void **元素(如'
')可以在'>'之前選擇''''。 (但這不是爲什麼這些跨度隱藏。) – 2015-03-13 13:06:58

+0

好吧,理解,但我怎麼可以選擇id = xxx?我使用打印此結構的模塊 - 「空白」或隱藏範圍 – 2015-03-13 13:07:16

回答

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

請在第一條消息中查看我的評論。我不能改變結構... – 2015-03-13 13:09:07

+0

@ Unknow.Vagrant:羅裏回答了你問的問題*。如果您有其他問題,請發表一個不同的問題。 – 2015-03-13 13:12:46