【问题标题】:How to return a javascript set style property to CSS default如何将 javascript 设置样式属性返回为 CSS 默认值
【发布时间】:2012-05-28 18:16:52
【问题描述】:

我正在尝试研究如何在使用 javascript 更改样式属性后恢复为样式表中的值(包括单位)。

在下面的示例中,我希望输出读取 100px(CSS 中的值),而不是 10px,就像 getComputedStyle 给出的那样。

我还将虚拟 div 保留在 top:25px,因此删除 style 属性将不起作用。

我最好的方法是克隆节点并读取高度并存储在属性中(http://jsfiddle.net/daneastwell/zHMvh/4/),但这并没有真正获得浏览器的默认 css 值(尤其是在 ems 中设置的情况下)。

http://jsfiddle.net/daneastwell/zHMvh/1/

<style>
 #elem-container{
   position: absolute;
   left:     100px;
   top:      200px;
   height:   100px;
 }
</style>

<div id="elem-container">dummy</div>
<div id="output"></div>  

<script>
  function getTheStyle(){
    var elem = document.getElementById("elem-container");
    elem.style.left = "10px";
    elem.style.top = "25px";
    var theCSSprop = window.getComputedStyle(elem,null).getPropertyValue("left");
    document.getElementById("output").innerHTML = theCSSprop;
   }
  getTheStyle();
</script>

【问题讨论】:

  • 为什么不能使用 CSS 类?然后,您只需添加/删除它们,而不是更改单个样式属性。
  • 此外,实际上 left is 的当前值是 10px,因为 getComputerStyle 返回该元素的...计算样式(包括样式属性),而不仅仅是 CSS 中指定的规则.注意:请注意,旧版本的 IE 不支持 getComputedStyle。
  • 我正在执行一项调整大小的任务,因此会计算“左”值,因此类无济于事,抱歉没有更具体。

标签: javascript css dom


【解决方案1】:

只需清除您希望退回到原始样式表的内联样式即可。

elem.style.left = null;

【讨论】:

  • 正是需要的,将样式恢复为 CSS 值。
  • 我会将它设置为''(空字符串)以与JavaScript给出的返回值保持一致。
  • 使用 '' 也使其与 TypeScript 兼容。
【解决方案2】:

结合 abaelter 的回答和 http://robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element/ 为我们提供以下功能:

var getCssStyle = function(elementId, cssProperty) {
  var elem = document.getElementById(elementId);
  var inlineCssValue = elem.style[cssProperty];

  // If the inline style exists remove it, so we have access to the original CSS
  if (inlineCssValue !== "") {
    elem.style[cssProperty] = null;
  }

  var cssValue = "";
  // For most browsers
  if (document.defaultView && document.defaultView.getComputedStyle) {
    cssValue = document.defaultView.getComputedStyle(elem, "").getPropertyValue(cssProperty);
  }
  // For IE except 5
  else if (elem.currentStyle){
    cssProperty = cssProperty.replace(/\-(\w)/g, function (strMatch, p1) {
      return p1.toUpperCase();
    });
    cssValue = elem.currentStyle[cssProperty];
  }

  // Put the inline style back if it had one originally
  if (inlineCssValue !== "") {
    elem.style[cssProperty] = inlineCssValue;
  }

  return cssValue;
}

放入您的示例代码并进行测试:

console.log("getCssStyle: " + getCssStyle("elem-container", "left"));

给我们getCssStyle: 100px,让您可以看到原始的 CSS 值。如果您只想恢复该值,请按照 abaelter 的说明和 null 您要恢复的 CSS 值进行操作。

【讨论】:

  • 太好了,如果您只需要知道 CSS 中的值而不改变元素的状态,这将非常有用。由于我需要恢复为 CSS 值,@abaelter 的响应是我将使用的响应。
  • 是的,我在编写函数后意识到它可能有用。
【解决方案3】:

style object 有一个内置的removeProperty() 方法,因此您可以执行以下操作:

elem.style.removeProperty('left');

据我所知,这与将属性设置为nullabaelter suggested 具有完全相同的效果。为了完整起见,我只是认为它可能值得包括在内。

【讨论】:

猜你喜欢
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
相关资源
最近更新 更多