【发布时间】:2016-10-23 18:45:23
【问题描述】:
有没有办法确定给定的 HTML 元素是否应用了伪元素(::before / ::after)而不调用
window.getComputedStyle(element, ":before/:after");
已编辑:答案是否
getComputedStyle 的问题在于性能。我需要验证页面上的每个元素是否具有伪元素——这就是性能非常关键的原因。 我尝试从 document.styleSheets 访问 cssRules 以查找末尾带有 ::before 或 ::after 的选择器,将其删除并找到与选择器其余部分匹配的元素,但此解决方案有其自身的问题:
- 无法访问来自不同域的样式表
- 可能需要检查数千个 cssRules(再次检查性能)
我还尝试比较带有和不带有伪元素的元素的大小和偏移量,但没有任何效果。即使没有准确的方法,我也很乐意找到一种方法,将要检查的元素数量至少减少 30%。
当我确定该元素具有伪元素时,我终于可以调用 getComputedStyle 来调查伪元素样式并对其进行更改。这部分完美运行。
已编辑:我无法控制源页面。页面样式可以从不同的域动态上传。假设我的代码是一个内容脚本或库,例如必须将所有伪元素前景更改为基于该伪元素的其他 CSS 属性计算的某种颜色。
所以主要问题是更改基于其他 CSS 属性,如果不实际检索伪元素的计算样式并计算更改,您无法为所有伪元素设置相同的样式。
例如你有 youtube.com 页面,你需要找到所有的伪元素和
- 如果此伪元素具有背景图像,则缩放该元素
- 如果此伪元素只有一个文本,则将其颜色更改为红色
- 等等……
【问题讨论】:
-
您能否提供更多详细信息,说明您正在做什么以及为什么?也许你试图达到的目标可以用不同于你想象的方式来实现......
-
我需要找到页面上所有的伪元素并改变它们的样式。例如字体颜色。
-
点击浏览器中的 F12 按钮。找到这个
<link href="http://domain.com/path/to/css/style.css" rel="stylesheet">将href值复制并粘贴到您的浏览器地址栏并转到那里。复制并粘贴到您的帖子中。除非您能在中途遇到我们,否则我们无法为您提供帮助,所以发布您的代码,您应该阅读minimal reproducible example -
不确定它是否真的能改善事情,但您可以排除替换元素,如
img、input、textarea、select等不允许伪元素。 -
这很有趣 - 不知道某些元素不能有伪 - 将检查它。谢谢。
标签: javascript html css pseudo-element