2009-10-05 97 views
0

有沒有在更緊湊的方式 我真的不希望使用的setAttribute,因爲它似乎是越野車在IE8 此列表中指定屬性的方式是所有屬性,所以它的相當長的Javascript屬性緊湊

else if(a=="textalign") 
{ 
    e.style.textAlign=""; 
    e.align=v 
} 
+0

你到底是什麼?你說屬性,然後你的例子是通過JavaScript設置CSS屬性,這與屬性無關。 – 2009-10-05 10:57:32

+0

查看答案1和評論... – 2009-10-07 14:11:29

回答

2
if(a=="textalign") 
{ 
    e.style.textAlign=""; 
    e.align=v 
} 

我不知道爲什麼你試圖通過HTML屬性來設置對齊,而不是僅僅使用CSS ...儘管我們有沒有align屬性許多元素,這是可靠的要少得多。 HTML align也被棄用,一般應避免。

你不說什麼你可能想要設置的「其他屬性」。如果您對HTML專門講屬性特性很容易通過名稱中的字符串來設置他們:

e[a]= v; 

但你需要a是HTML屬性屬性名,這將是「一致」而不是「textAlign設置」。它不會做任何特別的事情來嘗試解決像textAlign這樣的CSS覆蓋問題,因爲沒有自動化的方法來做到這一點,並且不贊成使用的HTML樣式屬性和CSS之間的交互是不明確的。堅持屬性或CSS(CSS是高度可取的);不要同時使用兩者。

如果你正在談論設置任何CSS樣式屬性,因爲我可能會從名字猜測是「textAlign設置」,這是類似於做:

e.style[a]= v; 

不過,話又說回來,你想要使用是確切的樣式屬性名稱'textAlign'而不是'textalign'。

如果你想通過自己的CSS名來設置CSS樣式屬性,如「文本對齊」,可以自動變換到DOM名稱:

// convert foo-bar-baz to fooBarBaz 
// 
var doma= a.replace(/-([a-z])/g, function(m, g) { 
    return g.toUpperCase(); 
}); 

e.style[a]= v; 

如果你確實需要使用病例像「textAlign設置」有損名字你必須用你想用它來獲得將案件發回的所有屬性名稱的查詢:

var propernames= ['textAlign', 'borderColor', 'paddingTop']; // etc 

for (var i= propernames.length; i-->0;) 
    if (propernames[i].toLowerCase()===a) 
     a= propernames[i]; 

e.style[a]= v; 

忘記的setAttribute。它與樣式屬性無關(它是IE6-7中的一個bug,它甚至可以用於那裏的樣式),並且不應該將它用於HTML文檔的元素,因爲還有其他的IE6-7 bug需要與之對抗那裏。堅持'DOM Level 2 HTML'直接屬性訪問的東西,這是更可靠,更易於閱讀。

+0

哇。這是一個比我打算寫一個問題要長得多的答案,這個問題需要回答者在回答之前猜測問題是什麼:) – 2009-10-05 15:37:38

+0

好的 - 對此感到抱歉。我建立一個豐富的文本編輯器,將設計模式中的樣式屬性直接應用到對象 - 所以我不能使用類。關於setAttribute的提示很有幫助 - ta。我只是不想有80個ifs,因爲我的函數試圖設置對象的大部分樣式屬性。 所以你說這會工作 a =「fontsize」 v =「10pt」 e =該元素的ID e [a] = v; 或 e.style [a] = v; ? – 2009-10-07 14:09:35

+0

差不多,但是DOM e.style屬性被稱爲'fontSize'。同樣,CSS在樣式名稱中都有一個連字符,DOM有一個大寫字母。 – bobince 2009-10-07 20:06:04

2

使用一個類而不是提供所有的屬性值。

.testClass 
{ 
    // set all attribute values here 
} 

e.className = "test"; 

element.className

+0

不能使用類 - 見下面 – 2009-10-07 14:10:40

0

使用一些框架,如JQuery,它需要所有的瀏覽器不兼容問題的照顧。在JQuery中,您使用.css('attributeName', 'value')方法。

0

jQuery可以很容易地使用.attr({attr1: val, attr2: val})等。它也可以避免許多跨瀏覽器兼容性錯誤。

+0

我不能使用jquery – 2009-10-07 14:10:09