Сообщение от Shitbox2
|
Или существующие объекты не затрагиваются?
|
расследование и ответ снизу.
да. они просто перемещаются :
<div id="from" style="border: 1px red solid;"> <div id="target">FOOBAR</div> </div>
<div id="to" style="border: 1px green solid;"></div>
<script>
// сокращение
var $ = document.getElementById.bind(document);
// добавим какое-нибудь свойство к элементу :
$("target").myprop = "myvalue";
// по клику будем выводить значение этого свойства :
$("target").addEventListener("click", function (e) {
alert( 'Значение свойства "myprop" : ' + this.myprop);
});
// теперь переместим элемент в другой элемент.
$("to").appendChild( $("target") );
</script>
А вот что происходит с элементом, если его appendChild'ят в то же место, где он находится - вопрос.
Попробую полазить щас в исходниках V8 ... самому интересно стало
Node.appendChild отсылает нас к
ContainerNode::appendCild, где после проверок на возможность вставки \ перемещения элемента (можем ли мы манипулировать вообще с ним) происходит проверка на то, одинаков ли this и цель вставки ( т.е. пытаемся ли мы вставить элемент сам в себя), всё-таки он вынимается из дерева и вставляется в родитель.
т.е. они каждый раз вынимаются из дерева, и вставляются на то же место.
это ненужная операция, которой нужно избегать.