内联样式属性的CSS选择器

Age*_*nce 97 html css css-selectors inline-styles

是否有CSS选择器通过其内联样式属性值选择此元素?

<div style='display:block'>...</div>
Run Code Online (Sandbox Code Playgroud)

就像是

div[cssAttribute=cssValue]
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 160

内联style属性与任何其他HTML属性没有区别,可以与子字符串属性选择器匹配:

div[style*="display:block"]
Run Code Online (Sandbox Code Playgroud)

正是出于这个原因,它非常脆弱.由于属性选择器不支持正则表达式,因此只能执行属性值的精确子字符串匹配.例如,如果属性值中有某个空格,如下所示:

<div style='display: block'>...</div>
Run Code Online (Sandbox Code Playgroud)

在您更改选择器以容纳空间之前,它将不匹配.然后它将停止匹配包含空格的值,除非您包含所有排列,并且令人作呕.但是如果你正在处理一个内联样式声明本身根本不可能改变的文档,你应该没问题.

还要注意,这根本不是按DOM中反映的实际指定,计算或使用的值来选择元素.是不可能的CSS选择器.

  • 我将举例说明何时有用.我正在写一个Selenium Web Driver测试,并且不会/不想改变测试中的实际代码.我需要通过样式显示来识别特定的自动完成(有几个隐藏),因为代码不提供唯一的id或父结构 - 它们可能被转储到回调中的<body>.但是,是的,就像你指出的那样脆弱. (9认同)
  • 无论如何,有时需要很好的尝试:P (5认同)
  • @andersand:在对我的回答进行了足够的评论后,我终于得到了更新.在编写我的原始答案时,我没有想过Selenium,我同意它是内联样式属性选择器最突出的用例之一. (3认同)
  • 如果在页面上使用hte google翻译栏,我发现它非常需要,因为它会在我们页面的顶部添加一个固定的div - 我们的导航已经修复了.此技术允许我们根据翻译栏是否可见来移动导航栏.翻译栏有静态类,唯一改变的是它的显示风格. (2认同)

小智 5

包含 ”;” 对我来说效果更好。

div[style*="display:block;"] 
Run Code Online (Sandbox Code Playgroud)

  • 这是因为属性 `style` 必须与 HTML 属性完全匹配 (4认同)