Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   documentFragment (https://javascript.ru/forum/misc/7787-documentfragment.html)

Shaci 19.02.2010 14:31

documentFragment
 
Это понятно: (скриптик расставляет li в ul задом наперед)
<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>

<script>
    var myUl = document.getElementsByTagName("ul")[0];
    var temp = [];
    for (var myLi = myUl.lastChild; myLi != null; myLi = myLi.previousSibling )
        temp.push(myLi);
    for(i = 0; i< temp.length; i++)
        myUl.appendChild(temp[i]);
    //Когда в документ с помощью appendChild вставляется уже существующий элемент
    //он автоматически удаляется из текущей позиции.
</script>


И это тоже понятно:
<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>

<script>
var fragment = document.createDocumentFragment();
var myUl = document.getElementsByTagName("ul")[0];
while(myUl.lastChild) fragment.appendChild(myUl.lastChild);
myUl.appendChild(fragment);
</script>


Почему так не работает?:
<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>


<script>
    var fragment = document.createDocumentFragment();
    var myUl = document.getElementsByTagName("ul")[0];
    for (var k = myUl.lastChild; k != null; k = k.previousSibling)
        fragment.appendChild(k);    
</script>


может это происходит из-за того, что элемент удаляется из текущей позиции?
=> т.е после первого прохода цикла присоединяем k в fragment ( с помощью appendChild) => когда начинаем искать
его соседа - (k = k.previousSibling) то уже ищем его в fragment?

Kolyaj 19.02.2010 14:36

Цитата:

Сообщение от Shaci
//Когда в документ с помощью appendChild вставляется уже существующий элемент
//он автоматически удаляется из текущей позиции.

Поэтому массив temp не нужен.

Цитата:

Сообщение от Shaci
т.е после первого прохода цикла присоединяем k в fragment ( с помощью appendChild) => когда начинаем искать
его соседа - (k = k.previousSibling) то уже ищем его в fragment?

Именно так.

Shaci 19.02.2010 15:22

Цитата:

Сообщение от Kolyaj (Сообщение 45415)
Поэтому массив temp не нужен.

<script>
var myUl = document.getElementsByTagName("ul")[0];
var children = myUl.childNodes;
for (var i = 0; i< children.length; i++) {
myUl.insertBefore(children[i], children[0]);
}
</script>

Kolyaj 19.02.2010 15:51

Только i лучше от 1.


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