我有一长串需要过滤的<li>
项目清单。我想要可见的。这是一个隐藏的例子:
<li style="display:none;"
<a href="https://www.example.com/dogs/cats/">
<img class="is-loading" width="184" height="245"
</a><span>dogscats</span>
</li>
未隐藏的那些没有显示可见属性,它们根本就没有样式属性。
这给了我与我想要的相反的东西:
document.querySelectorAll('.newSearchResultsList li[style="display:none;"]')
如何基于样式属性选择不等于或包含“display:none;”?
答案 0 :(得分:17)
这一切都很糟糕,但您可以使用:not()
选择器来反转您的选择。请注意某些浏览器规范化样式属性,因此您需要为可以规范化的空间包含选择器。
var elements = document.querySelectorAll(
'.newSearchResultsList li:not([style*="display:none"]):not([style*="display: none"])'
);
console.log(elements);
&#13;
<ul class="newSearchResultsList">
<li style="display:none;">hidden 1</li>
<li style="display:block;">visisble 1</li>
<li style="display:none;">hidden 2</li>
<li style="display:block;">visisble 2</li>
</ul>
&#13;
答案 1 :(得分:1)
试试这个:
document.querySelectorAll('.newSearchResultsList li:hidden')
或(编辑:基于样式属性。)
document.querySelectorAll('.newSearchResultsList li[style*="display:none"]');
或opossite
document.querySelectorAll('.newSearchResultsList li:not([style*="display:none"])');
答案 2 :(得分:1)
'.newSearchResultsList li'
选择器选择所有li
元素Array#filter
过度收藏getComputedStyle
获取与元素style
!== none
var liElems = document.querySelectorAll('.newSearchResultsList li');
var filtered = [].filter.call(liElems, function(el) {
var style = window.getComputedStyle(el);
return (style.display !== 'none')
});
console.log(filtered);
&#13;
<ul class="newSearchResultsList">
<li style="display:none;">
<a href="https://www.example.com/dogs/cats/">
<img class="is-loading" width="184" height="245">
</a><span>dogscats</span>
</li>
<li>
<a href="https://www.example.com/dogs/cats/">
<img class="is-loading" width="184" height="245">
</a><span>Visible</span>
</li>
</ul>
&#13;