Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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?
Ответить с цитированием
  #2 (permalink)  
Старый 19.02.2010, 14:36
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

Сообщение от Shaci
т.е после первого прохода цикла присоединяем k в fragment ( с помощью appendChild) => когда начинаем искать
его соседа - (k = k.previousSibling) то уже ищем его в fragment?
Именно так.
Ответить с цитированием
  #3 (permalink)  
Старый 19.02.2010, 15:22
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,126

Сообщение от Kolyaj Посмотреть сообщение
Поэтому массив 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>
Ответить с цитированием
  #4 (permalink)  
Старый 19.02.2010, 15:51
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Только i лучше от 1.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск