Используйте jQuery, чтобы проверить, скрыто ли все отделение

Между двумя существует одно важное, и полезное, различие.

, поскольку.ForEach использует for цикл для итерации набора, это допустимо (редактирование: до .net 4.5 - измененная реализация и они оба бросок):

someList.ForEach(x => { if(x.RemoveMe) someList.Remove(x); }); 

, тогда как foreach использование перечислитель, таким образом, это не допустимо:

foreach(var item in someList)
  if(item.RemoveMe) someList.Remove(item);
<час>

tl; доктор: НЕ Делайте copypaste этот код в Ваше приложение!

Этими примерами не является лучшая практика, они должны только продемонстрировать различия между ForEach() и foreach.

объекты Удаления из списка в for цикл может иметь побочные эффекты. Наиболее распространенный описан в комментариях к этому вопросу.

Обычно, если бы Вы надеетесь удалять несколько объектов из списка, Вы хотели бы разделить определение который объекты удалить из фактического удаления. Это не сохраняет Ваш код компактным, но это гарантирует, что Вы не пропускаете объектов.

16
задан user149109 12 January 2010 в 00:58
поделиться

4 ответа

Вы можете выполнить проверку, используя селектор, как предложено выше, и так:

 if ( $("div.test:visible").length === 0)
      $("#wrap1").hide( );
35
ответ дан 30 November 2019 в 16:09
поделиться

Лучший способ узнать, все ли они видны, - это подсчет для видимости, такой же, как и общее количество.

$("#wrap1 div:visible").length == $("#wrap1 div").length
0
ответ дан 30 November 2019 в 16:09
поделиться
jQuery("#wrap1").find("div").each(function()
   {
      if ($(this).is(':hidden'))
      {
      }
   }
);
0
ответ дан 30 November 2019 в 16:09
поделиться

Этот фрагмент зациклит все

и скроет их если тест скрыт.

$("div[id^='wrap']").each(function() {
  var wrap = $(this);

  if(wrap.children("div[class^='test']:visible").length == 0) {
    wrap.hide();
  } else {
    wrap.show();
  }
});

Если вы по-прежнему хотите, чтобы ваш

оставался видимым, если тестов вообще нет (как в разметке), вы можете используйте следующий модифицированный фрагмент:

$("div[id^='wrap']").each(function() {
  var wrap = $(this);

  if(wrap.children("div[class^='test']").length > 0 && 
     wrap.children("div[class^='test']:visible").length == 0) {
    wrap.hide();
  } else {
    wrap.show();
  }
});

Нет веских причин для нумерации классов (кроме крайних случаев). Ваша нумерация усложняет приведенный выше код, а также ваш CSS. Проще было бы просто убрать нумерацию из теста . (Вам это не нужно, так как вы всегда можете выбрать их подмножество, используя : lt (index) , :

8
ответ дан 30 November 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: