jQuery обнаруживает видимые но скрытые элементы

Это кажется, что должно быть довольно легко - но я не могу найти правильный селектор для него

Согласно документам (http://api.jquery.com/hidden-selector/ и http://api.jquery.com/visible-selector/)...

Элементы можно считать скрытыми по нескольким причинам:

Элемент предка скрыт, таким образом, элемент не показывают на странице.

То, что я хочу обнаружить, является "этим элементом, видимо, но содержится в скрытом родителе". Т.е., если бы я сделал родителя видимым, то этот элемент также был бы видим.

13
задан Paul 31 March 2010 в 14:00
поделиться

2 ответа

Если это то, что вы обычно будете использовать, создайте свой собственный селектор :) Вот пример:

jQuery.expr[':'].hiddenByParent = function(a) { 
   return jQuery(a).is(':hidden') && jQuery(a).css('display') != 'none'; 
};

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

<div style="display: none" id="parent">
  <div>
      <div id="child">Test</div>
  </div>
</div>
​

Примеры использования:

$("div:hiddenByParent").length;​​​​​​​​​​​​​​​​​​ // "2" (plain div + child match)
$("#child").is(":hiddenByParent"); // true

В качестве альтернативы вы можете использовать функцию .filter () следующим образом:

$('selector').filter(function() {
  return $(this).is(':hidden') && $(this).css('display') != 'none';
}
27
ответ дан 1 December 2019 в 19:49
поделиться

Если это конкретный элемент, который вы ищете, вы можете проверить его свойство отображения.

$('#element').css('display') != 'none';

Если это не конкретный элемент, вы можете найти скрытые родительские узлы с помощью: hidden, а затем использовать настраиваемую функцию для поиска узлов нужного вам типа. Например,

$('parent-selector:hidden').find('node-selector').each(function(){
  if($(this).css('display') != 'none') {
    // do what you wanted
  }
});

Если вам нужен чистый селектор, я думаю, вам не повезет, так как я не думаю, что то, что вы хотите, является частью спецификации CSS, поэтому не будет его в качестве селектора в jQuery.

1
ответ дан 1 December 2019 в 19:49
поделиться
Другие вопросы по тегам:

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