2

わかりましたので、要素が非表示かどうかをテストしています。問題は、親要素が非表示の場合、子も非表示と見なされるため、技術的に「display:none」ではない子要素であっても、追加する行が追加されます"

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 がそうするように言ったことを取り入れましたが、私が望むように動作するように変更しました。&&and 論理演算子を使用しました...

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 に答える