2014-07-17 26 views
0

我有一个对象dom其中有一个名为changeCss这改变任何元素的CSS属性:代码如下:为什么javascript函数不正常

var Dom = { 
changeCss : function(element, properties){ 
      if(typeof (properties) === "object"){ 

       var properties_name = Object.keys(properties), 
        properties_value = []; 

      for (var i = 0; i < properties_name.length ; i++ ){ 
       var a = properties_name[i], 
        b = properties[a]; 

        properties_value[i] = b; 

        element.setAttribute("style", a+":" + b+";"); 

      }; 

      }else{ 
       throw 'properties of '+ element +" should be object"; 
      } 
     }, 
} 

所以从这个代码,你会了解我想如何改变任何元素的CSS,这是完美的工作。但我面临的问题是,如果我写这段代码:

var x = document.getElementById("some_html_tag_id"); 
Dom.changeCss(x, {"width": "100px", "height":"80px"}); 

那么样式元素只包含height:80pxwidth:100px!如何添加所有这些样式属性?

感谢

安妮

回答

3

首先更换

element.setAttribute 

element.style[a]= b; 

但基本上你应该明白,你怎么做。 SetAttribute函数将新值赋给属性样式。 所以 while i == 0 style ='width:100px;' i == 1 style ='height:80px;'

因为您只是覆盖了值。如果你想在你的代码中保留SetAttribute函数。您需要先将所有值连接起来,然后使用set属性

1

在DOM。 style属性不是字符串。这是一个对象。这意味着你应该这样做,而不是:

element.style.setProperty(a,b); 

然而,旧版本的IE不支持setProperty的样式对象。因此,即使上述在技术上是这样做的符合标准的方式,即工程保证跨borwser方法是:

element.style[a] = b; 

注意,对于每一个实例,你认为你需要setPropertysetAttributeobject[x] = y语法也将起作用,并且在样式的情况下总是向后兼容(更不用说需要更少的打字)。

+0

除了不支持样式对象的setAttribute的旧版IE之外,它应该可以工作。 – slebetman

+0

啊,对不起。我把setAttribute与setProperty混淆了。编辑.. – slebetman

+0

当谈论跨浏览器方法时,可能有必要提一下,当使用'element.style [a] = ...时,FF需要骆驼式的属性名称,其他浏览器同时接受驼峰式和连字符式形成。 – Teemu

相关问题