简体   繁体   English

如何在使用外部样式表的javascript对象上访问样式属性?

[英]How can I access style properties on javascript objects which are using external style sheets?

I have an external style sheet with this in it: 我有一个外部样式表:

.box {
padding-left:30px;
background-color: #BBFF88;
border-width: 0;
overflow: hidden;
width: 400px;
height: 150px;
}

I then have this: 然后我有这个:

<div id="0" class="box" style="position: absolute; top: 20px; left: 20px;">

When I then try to access the width of the div: 当我然后尝试访问div的宽度时:

alert(document.getElementById("0").style.width);

A blank alert box comes up. 出现一个空白警报框。 How can I access the width property which is defined in my style sheet? 如何访问样式表中定义的width属性?

NOTE: The div displays with the correct width. 注意:div显示正确的宽度。

You should use window.getComputedStyle to get that value. 您应该使用window.getComputedStyle来获取该值。 I would recommend against using offsetWidth or clientWidth if you're looking for the CSS value because those return a width which includes padding and other calculations. 如果你正在寻找CSS值,我建议不要使用offsetWidthclientWidth ,因为那些返回包含填充和其他计算的宽度。

Using getComputedStyle , your code would be: 使用getComputedStyle ,您的代码将是:

var e = document.getElementById('0');
var w = document.defaultView.getComputedStyle(e,null).getPropertyValue("width");

The documentation for this is given at MDC : window.getComputedStyle MDC上提供了相关文档: window.getComputedStyle

offsetWidth displays the actual width of your div: offsetWidth显示div的实际宽度:

alert(document.getElementById("0").offsetWidth);

This width can be different to what you have set in your css, though. 但是,此宽度可能与您在css中设置的宽度不同。 The jQuery way would be (I really don't want to mention them all the time, but that's what all the libraries are there for): jQuery的方式是(我真的不想一直提到它们,但这就是所有库的用途):

$("#0").width(); // should return 400
$("#0").offsetWidth(); // should return 400 as well
$("#0").css("width"); // returns the string 400px

I hope this is helpful: 我希望这是有帮助的:

        function changecss(theClass,element,value) {
//Last Updated on June 23, 2009
//documentation for this script at
//http://www.shawnolson.net/a/503/altering-css-class-attributes-with-javascript.html
 var cssRules;

 var added = false;
 for (var S = 0; S < document.styleSheets.length; S++){

if (document.styleSheets[S]['rules']) {
  cssRules = 'rules';
 } else if (document.styleSheets[S]['cssRules']) {
  cssRules = 'cssRules';
 } else {
  //no rules found... browser unknown
 }

  for (var R = 0; R < document.styleSheets[S][cssRules].length; R++) {
   if (document.styleSheets[S][cssRules][R].selectorText == theClass) {
    if(document.styleSheets[S][cssRules][R].style[element]){
    document.styleSheets[S][cssRules][R].style[element] = value;
    added=true;
    break;
    }
   }
  }
  if(!added){
  if(document.styleSheets[S].insertRule){
          document.styleSheets[S].insertRule(theClass+' { '+element+': '+value+'; }',document.styleSheets[S][cssRules].length);
        } else if (document.styleSheets[S].addRule) {
            document.styleSheets[S].addRule(theClass,element+': '+value+';');
        }
  }
 }
}

It is taken from here . 它取自这里

答案大多是正确的,但是当你尝试使用它们时它们会依赖于它们依赖于浏览器的渲染模式(又称严格/怪癖模式,浏览器供应商等) - 最后的答案是最好的......使用jquery。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM