是否可以检测元素的样式是浏览器默认的,还是由样式表或内联样式设置的?
Can one detect if an element's style is just the browser default vs. is set by a stylesheet or inline styles?
我的javascript包含在X的站点中,但我对她的站点或她包含它的位置没有任何其他控制。如果她的样式是#element
,我想让它单独存在,但如果她没有,我有一个样式表,我将在<head>
中注入。有什么方法可以检测出她是否设计过吗?
检查它的高度是0或1失败,因为它有一些内容在里面,浏览器做出默认的决定。
对于javascript/jquery/其他框架来说,任何一种告诉CSS样式特异性的方法都将回答这个问题,并且是不可思议的。
对于内联样式,这很容易:您可以访问element.style
对象并检查您想要的属性-或使用element.hasAttribute('style')
来检查该属性是否在HTML中定义。
对于样式表应用的CSS规则,我建议你看一下"是否有可能检查某些CSS属性是否在Javascript的样式标签内定义?",这与你的问题非常相似。
使用这里描述的方法,如果您想过滤掉任何通用规则(如标记规则),也可以很容易地过滤掉只有#element
选择器的规则。
一种直接但不完善的方法是检查元素的style
属性是否有值,或者元素的class
属性是否已设置。
<div id="test_unstyled"></div>
<div id="test_styled" style="background-color: red;" class="something"></div>
JS
var unstyled = document.getElementById('test_unstyled'),
styled = document.getElementById('test_styled');
console.log('test_unstyled is styled?', !!(unstyled.getAttribute('style') || unstyled.className));
console.log('test_styled is styled?', !!(styled.getAttribute('style') || styled.className));
然而,这个解决方案不会检测任何通过CSS选择器应用的样式。如果你想把这些考虑进去,你可能不得不找出浏览器应用的所有默认样式,并进行检查,但这将变得非常难以维护,我不建议尝试实现这种方法,除非你愿意为此开发和维护一个库。
如果你发布了一个其他人可能会使用的插件,实现一个API
可能会更容易,这将允许插件的客户端决定他们是否想要应用插件样式。
你也可以总是包含你的样式表,用户将能够通过加载他们的自定义样式表来覆盖样式。
- 对插件初始化后动态加载的元素进行样式设置
- 使用jQuery按条件将样式设置为html标记
- 将 href 样式设置为按钮
- 如何以类似于vivus.js的样式设置SVG填充和路径的动画
- 根据用户输入声明样式设置
- 更改:在使用Javascript进行样式设置之前
- 反应:使用内联样式设置所有元素的样式
- 在AngularJS中构建SPA应用程序与纯JavaScript - 选择哪种Boostrap进行样式设置
- 我将如何使用CSS3对动态创建的jQuery UI元素进行样式设置
- Tumblr JS嵌入CSS/HTML标签进行样式设置
- 如何使用 ng 样式设置元素宽度 % 的样式
- 如何使用 Web 浏览器控件进行样式设置,但具有 C# 中的逻辑
- 从 javascript 获取样式设置时出现问题
- 样式设置 jQuery 验证错误消息
- 使用 React-Toolbox 的按钮进行样式设置不起作用
- 如何将离子输入类型文件的样式设置为按钮
- 如何将加载到<对象>中的元素样式设置为数据
- CKEDITOR没有't对来自数据库的文本进行样式设置
- 如何对一个元素进行ng样式设置's$索引由ng repeat创建
- D3可以't将样式设置为带标题的对象