2009-10-13 8 views
17

Dobrze ... Muszę znaleźć wszystkie < ul style = "display: block;"> elementy, dzięki czemu mogę ustawić, żeby wyświetlał: none.Potrzebuję użyć jQuery.find, aby znaleźć element o określonym stylu

myślę, że jestem na dobrej drodze tutaj ... ale nie całkiem tam:

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

Dla zaawansowanych użytkowników: w jaki sposób mogę znaleźć i zmienić styl z jednej linii?

Odpowiedz

24

To trudne, ponieważ stwierdził, ale jest rozwiązywalne inne sposoby. Najłatwiejszy to:

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

zakładając, że przedmioty są ukryte lub nie. Oczywiście, biorąc pod uwagę, chcesz ukryć je wszystkie, dlaczego nie po prostu:

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

spróbować uniknąć zmieniając styl CSS bezpośrednio. To problematyczne. Trudno odwrócić i trudno odkryć, czego szukasz. Użyj klasę Zamiast:

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

z:

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

lub

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

lub

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

lub

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

aby wymienić tylko kilka sposobów

0

coud użyć wyciszenia() lub slideUp() metody dla efektu wizualnego:

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

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

masz zły cytat na końcu;) –

+0

Dzięki, ale myślę, że mam zły odpowiedź, to jest bardziej taki: http: // stackoverflow.com/questions/1562634/need-to-use-jquery-find-to-find-element-with-specific-style/1562680 # 1562680 – powtac

0

nie wiem jak to zrobić w jednej linii, ale oto jak można to zrobić w ciągu kilku więcej:

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

Jeśli to, co chcesz, aby obsłużyć wszystkie elementy widoczne (zamiast tylko display: block te), zamiast tego możesz wypróbować selektor :visible.

19

Możesz być w stanie korzystać z selektorów atrybutów oraz „zawiera” opcję

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

To zasadniczo mówi „wszelkie ul kto atrybut styl zawiera wyświetlacz tekstowy: block”

+0

Dla mnie (w jQuery-1.9.0) daje to 'Błąd składni, nierozpoznane wyrażenie : ul [style * = display: block] ' –

+0

Edytowane w celu uwzględnienia brakujących ofert –

+1

To jest dobry pomysł, aby użyć tego selektora symboli wieloznacznych. Zastanawiam się, czy jest to szybsze niż inne sugestie. OP: możesz jednak rozważyć szerszy cel. Na przykład, jeśli z jakiegoś powodu istniałaby idealnie poprawna przestrzeń między 'display: block', to nie działałoby. Ale byłoby to "[style * =" block "]' przy założeniu, że nie jest zbyt szeroki dla twojego celu. – dhaupin

Powiązane problemy