你如何根据风格选择元素?

Posted

技术标签:

【中文标题】你如何根据风格选择元素?【英文标题】:How do you select elements based on their style? 【发布时间】:2010-10-01 07:40:53 【问题描述】:

使用 jQuery,您将如何找到具有特定样式的元素(例如:float: left),无论它是内联样式还是在 CSS 文件中定义的样式?

【问题讨论】:

【参考方案1】:

使用filter function:

$('*').filter(function() 
     return $(this).css('float') == 'left';
);

用适合您情况的选择器替换“*”。

【讨论】:

我认为比我的解决方案要好得多。 是的,+1 很好的答案,但为了理智和速度,人们可能希望将搜索字段减少到小于“*”的内容 您应该使用this.css.float,而不是为过滤器的每次迭代创建一个新的jQuery对象。 @Alnitak 如果你想使用 jQuery 的.css(),你需要把它变成一个对象。原因是 .css() 不是 javascript 函数,所以您仍然需要使用 $(this)。您可以使用$(this).css.float,但它不会找到left,因为float 不是索引。如果您想使用严格的this,则必须使用this.attributes.style.nodeValue.search(/float:(\s)?left/i) != -1 之类的不同方式选择它,因为其他属性可以设置为“左”。因此,即使有开销,$(this).css('float') 也是 IMO 的最佳选择。【参考方案2】:

这会很慢。就像真的很慢。如果您知道需要选择具有给定 CSS 样式的所有元素,则通过将单个附加 CSS 规则应用于每个元素,然后按该规则进行选择,您将看到更好的性能。

它的启动速度会更快,更易读。

CSS:

.float-left float:left

Javascript:

$('.float-left');

【讨论】:

我刚回来又看了一遍这个问题,现在有点尴尬。这绝对是最好的解决方案。我无法想象为什么我需要选择这样的元素......【参考方案3】:

嗯,我不知道我是否会这样处理。为什么不用一致的 ID 或类名重命名这些元素,然后选择它?

如果这不是一个选项,这应该可行:

this.getElementsByTagName('div').item(0).style.float = 'left';

我认为。

【讨论】:

这行不通。您的代码选择所有 div,将选择减少到第一个 div,然后将其浮动设置为左。

以上是关于你如何根据风格选择元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何用CSS选择器查询和风格化Web元素

Web自动化 - 选择操作元素 2

如何根据部分数据属性选择元素?

LINQ - 如何根据仅存在于某些记录中的另一个元素选择一个元素

如何根据前面定义的变量选择器选择具有属性的元素?

如何在 ES6 类中使用 this 的帮助来选择所有元素