2014-07-17 27 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

相關問題