В querySelector: как получить первый и получить последние элементы? какой порядок обхода используется в dom?
в div, имеют элементы (не обязательно 2-го поколения) с атрибутом move_id
.
Во-первых, хотелось бы, чтобы самый прямой способ получения первого и последнего элементов набора
попытался получить первый и последний через:
var first = div.querySelector('[move_id]:first');
var last = div.querySelector('[move_id]:last');
это бомбы, потому что: сначала и: последнее - принятие желаемого за действительное с моей стороны (?)
не может использовать методы массива querySelectorAll
, так как NodeList
не является массивом:
var first = (div.querySelectorAll('[move_id]'))[0];
var last = (div.querySelectorAll('[move_id'])).pop();
эта бомба, потому что NodeList
не имеет метода pop()
(да, можно было бы использовать методы Array поверх NodeList:
var first = div.querySelector('[move_id]');
var last = Array.prototype.pop.call(div.querySelectorAll('[move_id']));
это работает, и это то, что я сейчас использую, но думаю, что должно быть что-то более прямое, что я просто отсутствую)
Во-вторых, нужно проверить, что элементы перечислены путем предварительного прохода по глубине в соответствии с http://en.wikipedia.org/wiki/Tree_traversal
Ответы
Ответ 1
Чтобы получить доступ к первому и последнему элементам, попробуйте.
var nodes = div.querySelectorAll('[move_id]');
var first = nodes[0];
var last = nodes[nodes.length- 1];
Для обеспечения надежности добавьте проверки индексов.
Да, порядок узлов - предварительный порядок глубины - сначала. DOM document order
определяется как
Существует упорядочение, порядок документов, определенный на всех узлах документа, соответствующих порядку, в котором первый символ XML-представления каждого node встречается в XML-представлении документа после расширения общих объектов, Таким образом, элемент документа node будет первым node. Узлы элементов встречаются перед их детьми. Таким образом, узлы элементов заказа документов упорядочиваются в порядке появления их стартового тега в XML (после расширения сущностей). Узлы атрибута элемента появляются после элемента и перед его дочерними элементами. Относительный порядок узлов атрибутов зависит от реализации.
Ответ 2
:last
не является частью спецификации css, это специфичный jQuery.
вы должны искать last-child
var first = div.querySelector('[move_id]:first-child');
var last = div.querySelector('[move_id]:last-child');
Ответ 3
Пример получения элемента last:
document.querySelector(".groups-container >div:last-child input")