首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何判断特定的CSS属性是否是用jQuery继承的?

如何判断特定的CSS属性是否是用jQuery继承的?
EN

Stack Overflow用户
提问于 2011-02-15 05:13:20
回答 7查看 8.8K关注 0票数 29

这是一个非常简单的问题,所以我将非常简短:

如何判断特定DOM元素的CSS属性是否是继承的?

我之所以问这个问题,是因为使用jQuerycss方法,它将返回计算样式,它继承了父对象的CSS属性。有方法检索对象本身上设置的属性吗?

举个例子也许可以解释我做得更好的原因:

CSS:

代码语言:javascript
运行
复制
div#container {
  color:#fff;
}

HTML:

代码语言:javascript
运行
复制
<div id="container">
  Something that should be interesting
  <div class="black">
    Some other thing that should be interesting
  </div>
</div>

因此,在继承了div.blackcolor实例中,如何判断它是否是继承的?

$('div.black:eq(0)').css('color')显然会给我#fff,但是我想检索元素本身的样式,而不是它的父元素。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-02-15 06:24:10

要实际确定css样式是继承还是设置在元素本身上,您必须实现浏览器应用的确切规则来确定元素上特定样式的使用值。

您必须实现这个等级库,它指定计算和使用的值是如何计算的。

CSS选择器可能并不总是遵循父子关系,这可能简化了问题。考虑一下这个CSS。

代码语言:javascript
运行
复制
body {
    color: red;
}

div + div {
    color: red;
}

以及以下HTML:

代码语言:javascript
运行
复制
<body>
    <div>first</div>
    <div>second</div>
</body>

firstsecond都将以红色显示,但是,第一个div是红色的,因为它从父级继承它。第二个div是红色的,因为div + div CSS规则适用于它,这更具体。看看父母,我们会看到它有相同的颜色,但第二个div不是从那里得到的。

浏览器不公开任何内部计算,但getComputedStyle接口除外。

一个简单但有缺陷的解决方案是从样式表中运行每个选择器,并检查给定元素是否满足选择器。如果是,则假设样式直接应用于元素。假设您想在第一个样式表中查看每一种样式,

代码语言:javascript
运行
复制
var myElement = $('..');
var rules = document.styleSheets[0].cssRules;
for(var i = 0; i < rules.length; i++) {
    if (myElement.is(rules[i].selectorText)) {
        console.log('style was directly applied to the element');
    }
}
票数 10
EN

Stack Overflow用户

发布于 2011-02-15 06:07:15

我认为您无法判断给定的样式是否是继承的,我认为最好的方法是将给定的CSS属性设置为“继承”,捕获其计算值,并将其与原始值进行比较。如果他们是不同的,风格肯定不是继承的。

代码语言:javascript
运行
复制
var el = $('div.black:eq(0)');
var prop = el.css("color");
el.css("color", "inherit");
var prop2 = el.css("color");
el.css("color", prop);
if(prop != prop2)
  alert("Color is not inherited.");

基于jsFiddle的演示

要点是:如果在CSS中或通过内联样式将div.black设置为#fff,则此方法将考虑继承它。在我看来,这并不理想,但它可能适合你的需要。恐怕一个完美的解决方案需要遍历整个样式表。

票数 7
EN

Stack Overflow用户

发布于 2011-02-15 06:05:54

http://jsfiddle.net/k7Dw6/

代码语言:javascript
运行
复制
var $black = $('div.black:eq(0)');
alert($('<div>').attr('class', $black.attr('class')).css('line-height') === $black.css('line-height'));

您可以使用相同的类(我猜还有ID )创建一个新元素,并检查CSS属性是否相同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5000108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档