Создание новых элементов DOM

Мы уже давно привыкли пользоваться функцией document.createElement() для создания элементов, которые необходимо добавить в DOM. С учетом добавления аттрибутов и переменных, код выглядит приблизительно следующим образом:

var elem = document.createElement("input");
elem.setAttribute("id","uname");
elem.className("my_class");
elem.setAttribute("type", "text");
elem.setAttribute("name", "username");
elem.setAttribute("value", "");
elem.setAttribute("size", "20");
elem.onkeypress = validate;
elem._my_var_ = 12345;

Я решил создать функцию, которая делала бы все эти процедуры в одной строке, и вот что у меня получилось:

/**
 * Функция для создания элементов HTMLElement
 * @param {String} tag - имя элемента, которые нужно создать (div, input и т.д.)
 * @param {Object} attr - объект, содержащий аттрибуты элемента
 * @param {Object} vars - объект, содержащий переменные элемента
 */
function ce(tag, attr, vars){
	if(tag){
		var elem = document.createElement(tag);

		if (attr){
			for (var name in attr){
				var value = attr[name];
				if ( typeof value != "undefined" ) {
					if(name == 'class' || name == 'for'){
						name = { "for": "htmlFor", "class": "className" }[name] || name;
						elem[name] = value;
					} else {
						elem.setAttribute(name, value);
					}
				}
			}
		}

		if (vars){
			for (var i in vars)
				elem[i] = vars[i];
		}

		return elem;
	}
	return null;
}

Единственным обязательным параметром в этой функции является аргумент tag, другие два аргумента представляют собой объекты, которые содержат значения имена и значения аттрибутов и переменных, которе нужно присвоить элементу.

В итоге, создание текстового элемента, пример которого приведен выше, примет следующий вид:

// создаём текстовое поле
var elem = ce("input",
		{id:"uname", type:"text", name:"username", value:"", size:"20"},
		{className:"my_class", onkeypress:function(){alert(this._my_var_);}, _my_var_ : 12345}
);

И еще несколько примеров:

// элемент div без аттрибутов и переменных
var myDiv = ce("div");

// элемент form только с аттрибутами
var myForm = ce("form", {name:"search", action:"search.php", method:"post"});

// элемент span только с переменными
var mySpan = ce("span", null, {className:"theQuote", onmouseover:hoverMe});
Добавить в закладки:

Оставить комментарий