Набор JavaScript Объектов DOM - почему я не могу инвертировать с Array.reverse ()?

Посмотрите на этот пример Plnkr

Переменная this сильно отличается timesCalled с каждым нажатием кнопки увеличивается только на 1. Ответ на мой личный вопрос:

.click( () => { } )

и

.click(function() { })

создают одинаковое количество функции при использовании в цикле, как вы можете видеть из подсчета Guid в Plnkr.

10
задан Cerbrus 15 December 2014 в 13:56
поделиться

3 ответа

Поскольку имя getElementsByTag на самом деле возвращает структуру NodeList. Это имеет подобный массив как индексация свойств для синтаксического удобства, но это не массив. Например, набор записей на самом деле постоянно динамично обновляется - если Вы добавите новый тег img под myDivHolderId, то это автоматически появится в imagesArr.

См. http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-536297177 для больше.

14
ответ дан 3 December 2019 в 15:07
поделиться

getElementsByTag() возвращает NodeList вместо Массива. Можно преобразовать NodeList в Массив, но отметить, что массив будет другим объектом, так инвертирование, это не будет влиять на положение узлов DOM.

var listNodes = document.getElementById("myDivHolderId").getElementsByTagName("img");
var arrayNodes = Array.slice.call(listNodes, 0);
arrayNodes.reverse();

Чтобы сменить положение, необходимо будет удалить узлы DOM и добавить их всех снова в правильном положении.

Array.prototype.slice.call(arrayLike, 0) отличный способ состоит в том, чтобы преобразовать подобное массиву в массив, но если Вы пользуетесь библиотекой JavaScript, он может на самом деле обеспечить еще лучший/быстрее способ сделать это. Например, jQuery имеет $.makeArray(arrayLike).

Можно также использовать методы Массива непосредственно на NodeList:

Array.prototype.reverse.call(listNodes);
9
ответ дан 3 December 2019 в 15:07
поделиться

Ваша первая строка не важна, так как она не принуждает присвоение на переменную, работы JavaScript другой путь. imagesArr, не имеет Массива Типа (), из того, что тип возврата getElementsByTagName ("img"). В этом случае, HtmlCollection в Firefox 3.

Единственные методы на этом объекте, индексаторы и длина. Для работы наоборот, просто выполните итерации назад.

1
ответ дан 3 December 2019 в 15:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: