Показать сообщение отдельно
  #1 (permalink)  
Старый 07.12.2014, 06:37
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Зачем 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() возвращал бы результат замены, а не х знает что.

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