2010-06-25 176 views
9

我有这些函数来创建元素并更改它们的属性。你能给我一个关于如何修改它们的建议吗?JavaScript - 创建元素并设置属性

function create(elem) { 
return document.createElementNS ? document.createElementNS("http://www.w3.org/1999/ xhtml", elem) : document.createElement(elem); 
} 

function attr(elem, name, value) { 
if (!name || name.constructor != String) return ""; 
name = {"for": "htmlFor", "class": "className"}[name] || name; 
if (typeof value != "undefined") { 
    elem[name] = value; 
    if (elem.setAttribute) elem.setAttribute(name, value); 
} 
return elem[name] || elem.getAttribute(name) || ""; 
} 

我想是这样的创建( '格',{ '身份证': '测试', '类': '平稳'});

function create(elem, attr) { 
if (!attr) return document.createElementNS ? document.createElementNS("http://www.w3.org/1999/xhtml", elem) : document.createElement(elem); 
if (attr) { 
    var el = document.createElementNS ? document.createElementNS("http://www.w3.org/1999/xhtml", elem) : document.createElement(elem); 
    for (var i = 0; i < attr.length; i++) { 
    attr(el, name[i], value[i]); 
    } 
    return el; 
} 

}

请帮=]

回答

0

我建议像jQuery JavaScript框架。他们已经实现了这个功能。

$("<div/>", { 
    "class": "test", 
    text: "Click me!", 
    click: function(){ 
     $(this).toggleClass("test"); 
    } 
}).appendTo("body"); 
+4

我认为虽然这并不是一般的不好的建议,但这个人似乎正在建立一个他自己的小框架,可能要从经验中学习。 – Pointy 2010-06-25 12:05:24

2

您无法通过这样一个对象迭代:

for (var k in attrs) { 
    if (attr.hasOwnProperty(k)) 
    attr(el, k, attrs[k]); 
} 

请注意,我改变了你的“ATTR”变量“ATTRS”,因此,它不隐藏“ATTR”功能你已经创建。此外,在您的“attr”功能中,更改“undefined”测试:

if (typeof value !== undefined) 

会更安全一些。使用“==”和“!=”进行比较会尝试进行类型转换,如果您只是检查undefined,则不需要该转换。

0

一个忠告:我个人更喜欢jquery的方式,因为你可以直接将css和事件添加到元素,并通过var名称而不是id来引用对象,但是......使用这种方法来创建输入元素,即ie8不允许你设置类型属性,所以要小心创建按钮,文本框等,例如,jquery会抛出“类型属性不能改变”的错误。

如果代码要在ie9之前的浏览器中使用,最好使用:document.createElement来代替以提高兼容性。

相关问题