Hei*_*nzi 12 html javascript css jquery jquery-selectors
HTML:
<div class="outer">
<div id="inner1" class="inner" style="display: none"></div>
<div id="inner2" class="inner"></div>
<div id="inner3" class="inner"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
JavaScript(小提琴):
var $first_visible = $("div.inner:visible:first");
Run Code Online (Sandbox Code Playgroud)
这将返回第一个可见的内部div,即inner2.
但是,只要隐藏了外部div(假设我想稍后将其淡入):
<div class="outer" style="display: none">
<div id="inner1" class="inner" style="display: none"></div>
<div id="inner2" class="inner"></div>
<div id="inner3" class="inner"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
所有内部div都被认为是隐藏的,选择器不再返回inner2.
我如何修改我的jQuery选择器以忽略容器的可见性?
一种选择是显示父元素,检查第一个可见元素,然后再次隐藏父元素。
或者,由于元素具有内联 CSS,您可以根据属性是否display设置为 来过滤元素none,然后检索过滤集合中的第一个元素:
var $first_visible = $(".inner").filter(function () {
return this.style.display !== 'none';
}).first();
Run Code Online (Sandbox Code Playgroud)
var $first_visible = $(".inner").filter(function () {
return this.style.display !== 'none';
}).first();
Run Code Online (Sandbox Code Playgroud)
var $first_visible = $(".inner").filter(function () {
return this.style.display !== 'none';
}).first();
$("div#result").text('First visible: #' + $first_visible[0].id);Run Code Online (Sandbox Code Playgroud)
然而,更好的方法是使用.getComputedStyle()方法检查元素的计算样式。这样做时,您可以确定display元素的 是否设置为,none即使该元素没有内联 CSS。
var $first_visible = $(".inner").filter(function () {
return window.getComputedStyle(this, null).getPropertyValue('display') !== 'none';
}).first();
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="outer" style="display: none;">
<div id="inner1" class="inner" style="display: none"></div>
<div id="inner2" class="inner"></div>
<div id="inner3" class="inner"></div>
</div>
<div id="result"></div>Run Code Online (Sandbox Code Playgroud)
var $first_visible = $(".inner").filter(function () {
return window.getComputedStyle(this, null).getPropertyValue('display') !== 'none';
}).first();
Run Code Online (Sandbox Code Playgroud)
var $first_visible = $(".inner").filter(function () {
return window.getComputedStyle(this, null).getPropertyValue('display') !== 'none';
}).first();
$("div#result").text('First visible: #' + $first_visible[0].id);Run Code Online (Sandbox Code Playgroud)