Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Зачем replaceChild() возвращает old child или как это делают (https://javascript.ru/forum/events/52179-zachem-replacechild-vozvrashhaet-old-child-ili-kak-ehto-delayut.html)

kostyanet 07.12.2014 06:37

Зачем replaceChild() возвращает old child или как это делают
 
Имеется интерфейс фильтра по любому одному полю формы такого в общем хтмля: в div - родителе - список, поле ввода, кнопка. Поле ввода копируется из формы, то есть клонируется. Оно уже все готовое - со всем барахлом, например это может быть еще список, или дата, или там цвет и тп. Все работает, но вопрос в черезжопенном методе replaceChild(); Зачленом он возвращает старую ноду? Сейчас так (кусок)

var filter_list=document.getElementById("_filter"),
	parent=document.querySelector(".filter"),
	filter_value=document.getElementById("_filter_value"),
	old_child=filter_value;

filter_list.addEventListener("change",function(e){
	var field=document.getElementsByName(this.value)[0];
	if(!field || field.type=="file") {
		parent.replaceChild(filter_value,old_child);
		old_child=filter_value;
		return;
	}
	var new_child=field.cloneNode(true);
	new_child.removeAttribute("name");
	new_child.removeAttribute("onchange");
	parent.replaceChild(new_child,old_child);
	old_child=new_child;
});


А могло быть так:

var filter_list=document.getElementById("_filter"),
	parent=document.querySelector(".filter"),
	filter_value=document.getElementById("_filter_value"),
	child=filter_value;

filter_list.addEventListener("change",function(e){
	var field=document.getElementsByName(this.value)[0];
	if(!field || field.type=="file")
		return child=parent.replaceChild(filter_value,child);
	child=parent.replaceChild(field.cloneNode(true),child);
	child.removeAttribute("name");
	child.removeAttribute("onchange");
});


если бы бабушка была дедушкой, то есть replaceChild() возвращал бы результат замены, а не х знает что.

Или как такое сделать нечерезжопенно?


Часовой пояс GMT +3, время: 00:56.