好的家伙所以我正在测试元素是否被隐藏,问题是如果隐藏了父元素,那么孩子们也被认为是隐藏的,所以我附加的行即使是非技术上的子元素也会附加显示:无“
function checkIfVisible() {
var checkLeft= $('#left').children('.module').filter(':hidden');
if(checkLeft.length > 0) {
if(!$('.resetLeft').length) {
left.prepend('<span class="resetLeft">Reset Left Widgets</span>');
}
}
我在页面加载时运行此脚本,并且在任何子元素被点击时都被隐藏。如果隐藏了父元素但没有隐藏任何子元素(显示:无),如何阻止脚本分配前添加的元素?
所以基本上。
如果隐藏#left
(父级)并且没有孩子,我不希望resetLeft
被添加。但是如果隐藏了#left
并且显示了它的一个或多个子节点:则不会先添加{{1}}。即使左边没有隐藏,我也需要这项工作。
答案 0 :(得分:3)
这应该这样做:
var visible = $('#left').is(':hidden') && $('#left').children('.module').filter(function() {
return this.style.display === 'none';
}).length === 0;
但这似乎是一个黑客。你为什么被迫这样做?
答案 1 :(得分:1)
我采取了Blender所说的那样做但我改变了它以我想要的方式工作。我使用了&&
和逻辑运算符......
function checkIfVisible() {
var checkLeft=
$('#left').is(':visible')
&&
$('#left').children('.module').filter(':hidden').length > 0;
if(checkLeft) {
if(!$('.resetLeft').length) {
left.prepend('<span class="resetLeft">Reset Left Widgets</span>');
}
}
这对我来说非常有用,我所做的只是将函数添加到显示#left
元素的click函数中!