此页面上所有方法的 JSPerf
编辑:我原来的方法更快的原因是它使用.find('>' + selector)
, where.children()
必须使用(循环遍历所有子元素,并检查元素是否与选择器匹配)。
由于div
是原生支持的选择器,并且测试用例不包含深度嵌套的元素,因此我的解决方案速度很快。但是在对其进行规范化之后,它看起来几乎等于 qwertymks 解决方案。这两种方案的 JSPerf 会显示他的方案稍微快一点,因为它少了一个函数调用。
此页面上的解决方案是通用的:下面的代码可以针对特定情况进行优化(例如选择器只是一个标签的事实):http: //jsfiddle.net/kFZJs/
为了加快进度,拆分选择器,因为:visible
不是原生的 CSS 选择器。
首选的解决方案应该使用尽可能少的 jQuery,因为所需的解决方案必须是高性能的。为此,请检查:visible
.
原始函数包含jQuery.support.reliableHiddenOffsets
. 当您的孩子不是表格单元格(仅在 IE8- 中使用)时,可以安全地剥离这有利于性能。
现在,编写一个 jQuery 插件(它并不昂贵):
(function($) {
$.fn.hasAtLeastOneVisibleChild = function(selector) {
var $col = this.children(selector), i, elem;
for (i=0; i<$col.length; i++) {
var elem = $col[i];
if (elem.offsetWidth !== 0 || elem.offsetHeight !== 0) {
return true;
}
}
return false;
};
})(jQuery);
// Usage:
$this.hasAtLeastOneVisibleChild('div'); // True or false