Тема: documentFragment
Показать сообщение отдельно
  #1 (permalink)  
Старый 19.02.2010, 14:31
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,126

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?
Ответить с цитированием