火狐,查询选择和可见伪选择(Firefox, query selector and the visi

2019-08-02 18:56发布

反正是有使用伪选择器与Firefox的querySelector()或querySelectorAll()函数来检测的知名度? 我特别希望能够做这样的事情:

elem.querySelector('#list .list-item:visible');
elem.querySelector('#section .sub-section:visible .title');

无需担心浏览器不一致或其他执行,只是Firefox浏览器。 谢谢!

编辑:可见由不为None可视性不被隐藏 显示定义。

Answer 1:

不,没有。 CSS规范没有定义:visible (或相关)选择,并AFAIK Firefox不实行非标准伪选择。

如果您想对这个自己实现,需要注意的jQuery如何实现它:visible选择:

在jQuery的1.3.1(及以上)的元素是可见的,如果它的CSS“显示”不是“无”,它的CSS“知名度”是不是“隐藏”,其类型(如果是输入)是不是“隐”。 jQuery中1.3.2一个元件是可见的,如果它的浏览器报告的offsetWidth或的offsetHeight大于0。

来源: http://docs.jquery.com/Release:jQuery_1.3.2#:visible.2F:hidden_​​Overhauled



Answer 2:

由于在没有本地执行力度:可见伪选择我决定用CSS类来隐藏和显示我的元素,从而允许只是简单地检查类名,而不是知名度。 这里是我的选择貌似现在:

elem.querySelector('#list .list-item:not(.hidden)');

现在,在2016年,我们还可以使用隐藏属性,HTML5,所以这个选择将工作太:

elem.querySelector('#list .list-item:not([hidden])');


Answer 3:

使用普通的JavaScript,你也可以模仿jQuery的行为很容易,把你的querySelector结果到一个数组中,并对其进行筛选:

Array.prototype.slice.call(document.querySelectorAll('your selector'))

这会为您选择的结果的普通数组,可以作为过滤:

.filter(function (item,index) { return item.style.display!="none" } );

或jQuery的情况下,即使其他部分( item.style.visibility != "hidden" && item.style.opacity > 0 && ... )。

作为一个班轮:

Array.prototype.slice.call(document.querySelectorAll('your selector')).filter(function (item,index) { return item.style.display!="none" } );


Answer 4:

为了找到元素不在display:none选择等效CSS来:visible

:not([style='display:none'])

你可以对做同样的visibility:hidden ,然后链:not()选择,如果你需要。

这里有一个小提琴 。

编辑:要小心用空格和其他标点符号。 如果以后操作使用jQuery和这些元素hide()例如,需要调用相同的功能,那么您就需要链:not([style="display: none;"])你的CSS选择器。



Answer 5:

检查是否元素是可见的,支持所有主要的浏览器:

jQuery的:

$('.list-item').is(':visible');

香草JS:

function isVisible(elem) {return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0; }


文章来源: Firefox, query selector and the visible pseudo selector