2

好的,伙计们,我正在测试元素是否隐藏,问题是如果父元素被隐藏,那么子元素也被认为是隐藏的,所以即使子元素在技术上不是“显示:无”,我附加的行也会被附加"

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 个或多个子项是 display:none ,那么就在前面。即使 left 没有隐藏,我也需要这项工作。

4

2 回答 2

3

这应该这样做:

var visible = $('#left').is(':hidden') && $('#left').children('.module').filter(function() {
    return this.style.display === 'none';
}).length === 0;

但这似乎是一个黑客。你为什么要被迫这样做?

于 2013-06-16T19:05:26.947 回答
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元素的单击功能中!

于 2013-06-16T23:25:28.573 回答