У меня есть эти функции, чтобы создать элементы и изменить их атрибуты. Вы могли дать мне совет относительно того, как изменить их?
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;
}
}
Помогите =]
Вы не можете итерировать объект подобным образом:
for (var k in attrs) {
if (attr.hasOwnProperty(k))
attr(el, k, attrs[k]);
}
Обратите внимание, что я изменил вашу переменную "attr" на "attrs", чтобы не скрывать созданную вами функцию "attr". Также в функции "attr" наверху измените тест "undefined":
if (typeof value !== undefined)
чтобы было немного безопаснее. Сравнения с "==" и "!=" пытаются преобразовать тип, что не нужно, если вы просто проверяете undefined
.
Я бы порекомендовал фреймворк javascript, например jQuery. У них уже реализована эта функция.
$("<div/>", {
"class": "test",
text: "Click me!",
click: function(){
$(this).toggleClass("test");
}
}).appendTo("body");