需要使用jQuery.find来查找具有特定样式的元素

Ste*_*ven 24 jquery find

对...我需要找到所有<ul style ="display:block;">元素,这样我就可以设置display:none.

我想我在这里正确的道路......但不是那里:

jQuery('#adminMenu li').find("ul").css('display');
Run Code Online (Sandbox Code Playgroud)

对于高级用户:如何通过一行查找和更改样式?

cle*_*tus 26

如上所述这很棘手,但可以通过其他方式解决.最简单的是:

$("#adminMenu li ul:visible").hide();
Run Code Online (Sandbox Code Playgroud)

假设项目是隐藏的或不是隐藏的.当然,考虑到你想隐藏它们,为什么不只是:

$("#adminMenu li ul").hide();
Run Code Online (Sandbox Code Playgroud)

尽量避免直接更改CSS样式.这是有问题的.很难扭转,因为你发现很难找到.改为使用类:

#adminMenu li ul { display: none; }
ul.block { display: block; }
Run Code Online (Sandbox Code Playgroud)

有:

$("#adminMenu li ul").removeClass("block");
Run Code Online (Sandbox Code Playgroud)

要么

$("#adminMenu li ul.block").removeClass("block");
Run Code Online (Sandbox Code Playgroud)


Cor*_*nie 22

您可以使用属性选择器和"包含"选项

$('#adminMenu li ul[style*="display:block"]').hide()
Run Code Online (Sandbox Code Playgroud)

这基本上说'任何ul谁的样式属性包含文本显示:块'

  • 使用该通配符选择器是个好主意。我想知道它是否比其他建议更快。OP:不过,您可能需要考虑更广泛的目标。例如,如果无论出于何种原因,`display: block` 之间有一个完全有效的空间,这将不起作用。但这会`[style*="block"]` 假设它对你的目的来说不是太宽泛。 (2认同)
  • 对我来说,当我在`display:`和`block`之间添加空格时,它的工作-例如`$('#adminMenu li ul [style * =“ display:block”]')。hide()`jquery-3.3.1 (2认同)

asa*_*sri 7

你可以使用过滤器.(http://api.jquery.com/filter/)

所以你可以这样做.

$('ul').filter(function() {
    return $(this).css('display') == 'block';
});
Run Code Online (Sandbox Code Playgroud)