2009-10-13 2 views
17

Правильно ... Мне нужно найти все < ul style = "display: block;"> элементы, так что я могу установить его на отображение: none.Необходимо использовать jQuery.find, чтобы найти элемент со специфическим стилем

Я думаю, что я нахожусь на правильном пути здесь ... но не совсем там:

jQuery('#adminMenu li').find("ul").css('display'); 

Для опытных пользователей: как я могу найти и изменить стиль с одной линией?

ответ

24

Это сложно, как указано, но решаемые другими способами. Самый простой из них:

$("#adminMenu li ul:visible").hide(); 

Предполагая, что предметы либо скрыты, либо нет. Конечно, учитывая, что вы хотите скрыть их все, почему бы и нет:

$("#adminMenu li ul").hide(); 

Попробуйте и не меняйте стиль CSS напрямую. Это проблематично. Трудно отменить, так как вы обнаруживаете, что трудно искать. Используйте класс вместо:

#adminMenu li ul { display: none; } 
ul.block { display: block; } 

с:

$("#adminMenu li ul").removeClass("block"); 

или

$("#adminMenu li ul.block").removeClass("block"); 
0
$('#adminMenu li').find("ul:visible").css('display', 'none'); 

или

$('#adminMenu li').find("ul:visible").hide(); 

или

$('#adminMenu li ul:visible').hide(); 

назвать несколько способов

0

Вы coud использовать FADEOUT() или slideUp() методы для визуального эффекта:

jQuery('#adminMenu li').find("ul").fadeOut('fast'); 

jQuery('#adminMenu li').find("ul").slideUp('fast'); 
0
$('#adminMenu li ul').hide(); 
+0

вы ошиблись котировка в конце;) –

+0

Спасибо, но я думаю, что у меня есть неправильный ответ, то это еще одно: HTTP: // StackOverflow.com/questions/1562634/need-to-use-jquery-find-to-find-element-with-specific-style/1562680 # 1562680 – powtac

0

Не знаю, как сделать это в одной строке, но вот как вы можете это сделать в паре подробнее:

jQuery('#adminMenu li').find("ul").each(function(){ 
    if($(this).css("display") == "block"){ 
    // do something 
    } 
}); 

Если то, что вы хотите, чтобы обработать все видимые элементы (вместо только display: block тех), вы можете попробовать селектор :visible.

19

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

$('#adminMenu li ul[style*="display:block"]').hide() 

Это по существу говорит: «любой уль кто стиль атрибут содержит текстовый дисплей: блок»

+0

Для меня (в jQuery-1.9.0) это дает «Синтаксическая ошибка, нераспознанное выражение : ul [style * = display: block] ' –

+0

Отредактировано для включения недостающих котировок –

+1

Это хорошая идея использовать этот подстановочный знак. Интересно, это быстрее, чем другие предложения. OP: возможно, вы захотите рассмотреть более широкую цель. Например, если по какой-либо причине было совершенно допустимое пространство между 'display: block', это не сработало бы. Но это будет '[style * =" block "]' при условии, что он не слишком широк для вашей цели. – dhaupin

1

Вы можете использовать фильтр. (http://api.jquery.com/filter/)

Так вы можете сделать, как показано ниже.

$('ul').filter(function() { 
    return $(this).css('display') == 'block'; 
}); 
Смежные вопросы