有没有一种方法可以更紧凑地分配属性 我真的不想使用 setAttribute 因为它在 ie8 中似乎有问题 该列表适用于所有属性,因此相当长
else if(a=="textalign")
{
e.style.textAlign="";
e.align=v
}
最佳答案
if(a=="textalign")
{
e.style.textAlign="";
e.align=v
}
我不知道为什么你要尝试通过 HTML 属性而不是仅使用 CSS 设置对齐方式...这不太可靠,因为有许多元素没有 align
属性。 HTML align
也已弃用,一般情况下应避免使用。
您没有说明您可能想要设置的“其他属性”是什么。如果您具体讨论 HTML 属性属性,则可以轻松地通过字符串中的名称来设置它们:
e[a]= v;
但是您需要 a
作为 HTML 属性名称,它是“align”而不是“textalign”。尝试解决像 textAlign 这样的 CSS 覆盖并不会做任何特别的事情,因为没有自动化的方法可以做到这一点,并且已弃用的 HTML 样式属性和 CSS 之间的交互定义不明确。坚持使用属性或 CSS(CSS 是最好的选择);不要同时使用两者。
如果您正在谈论设置任何 CSS 样式属性,正如我可能从名称“textalign”猜到的那样,其操作方式类似:
e.style[a]= v;
但话又说回来,您希望使用确切的样式属性名称“textAlign”而不是“textalign”。
如果您想通过 CSS 名称设置 CSS 样式属性,例如“text-align”,您可以将其自动转换为 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;
忘记设置属性。它与样式属性无关(这是 IE6-7 中的一个错误,它甚至适用于那里的样式),并且您不应该在 HTML 文档的元素上使用它,因为还有其他 IE6-7 错误需要解决那里。坚持使用“DOM Level 2 HTML”直接属性访问内容,这更可靠且更易于阅读。
关于Javascript 属性紧凑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1519225/