反正是有使用伪选择器与Firefox的querySelector()或querySelectorAll()函数来检测的知名度? 我特别希望能够做这样的事情:
elem.querySelector('#list .list-item:visible');
elem.querySelector('#section .sub-section:visible .title');
无需担心浏览器不一致或其他执行,只是Firefox浏览器。 谢谢!
编辑:可见由不为None和可视性不被隐藏 显示定义。
不,没有。 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
由于在没有本地执行力度:可见伪选择我决定用CSS类来隐藏和显示我的元素,从而允许只是简单地检查类名,而不是知名度。 这里是我的选择貌似现在:
elem.querySelector('#list .list-item:not(.hidden)');
现在,在2016年,我们还可以使用隐藏属性,HTML5,所以这个选择将工作太:
elem.querySelector('#list .list-item:not([hidden])');
使用普通的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" } );
为了找到元素不在display:none
选择等效CSS来:visible
是
:not([style='display:none'])
你可以对做同样的visibility:hidden
,然后链:not()
选择,如果你需要。
这里有一个小提琴 。
编辑:要小心用空格和其他标点符号。 如果以后操作使用jQuery和这些元素hide()
例如,需要调用相同的功能,那么您就需要链:not([style="display: none;"])
你的CSS选择器。
检查是否元素是可见的,支持所有主要的浏览器:
jQuery的:
$('.list-item').is(':visible');
香草JS:
function isVisible(elem) {return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0; }