Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Замена элементов в массиве (https://javascript.ru/forum/misc/47984-zamena-ehlementov-v-massive.html)

bdoxhobehue 15.06.2014 11:04

Замена элементов в массиве
 
Добрый день,

Не могу понять почему не происходит замены элементов код ниже:

var elements=document.body.querySelectorAll('ul>li>ul');
for (var i=0;i<elements.length;i++){
     elements[i]=elements[i].parentNode;
}



Заранее спасибо, за ответ

zOdmin 15.06.2014 11:14

Видимо, вы создаете массив, в который не копируете реальные объекты, а всего лишь заполняете его ссылками на них. Далее заменяете эти "ссылки на объекты" на "ссылки на родителей объектов". Массив меняется, а страница остается неизменной.

zOdmin 15.06.2014 11:16

Вам нужно применять методы removeChild и appendChild.

Erolast 15.06.2014 11:27

Результат querySelectorAll - ссылка не на массив, а на массивоподобный объект, и свойства этого объекта защищены от перезаписи, потому ничего и не работает. Нет, с помощью определенных манипуляций, конечно, для записи открыть свойства можно, но лучше не идти против языка) Создай отдельный массив, и в него заноси.
<div><span></span></div>
<div><span></span></div>
<div><span></span></div>
    
<script>
  var elements = document.body.querySelectorAll('span');
  console.log(elements);
  var parent_elements = [];

  for (var i = 0; i < elements.length; i++) {
    parent_elements[i] = elements[i].parentNode;
  }

  console.log(parent_elements);
</script>


Еще совет - делай отбивку операторов пробелами. Код внезапно становится во много раз читабельнее.

bdoxhobehue 15.06.2014 11:34

Цитата:

Сообщение от zOdmin (Сообщение 316590)
... Далее заменяете эти "ссылки на объекты" на "ссылки на родителей объектов". Массив меняется, а страница остается неизменной.

В том то и дело массив не меняется, пока никаких видоизменений я на странице не делаю, просто хочу поменять каждый элемент массива на его родительский элемент.

bdoxhobehue 15.06.2014 11:35

Цитата:

Сообщение от Erolast (Сообщение 316593)
Результат querySelectorAll - ссылка не на массив, а на массивоподобный объект, и свойства этого объекта защищены от перезаписи, потому ничего и не работает. Нет, с помощью определенных манипуляций, конечно, для записи открыть свойства можно, но лучше не идти против языка) Создай отдельный массив, и в него заноси.
<div><span></span></div>
<div><span></span></div>
<div><span></span></div>
    
<script>
  var elements = document.body.querySelectorAll('span');
  console.log(elements);
  var parent_elements = [];

  for (var i = 0; i < elements.length; i++) {
    parent_elements[i] = elements[i].parentNode;
  }

  console.log(parent_elements);
</script>


Еще совет - делай отбивку операторов пробелами. Код внезапно становится во много раз читабельнее.



Большое спасибо


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