Какой уникальный идентификатор для элемента / узла DOM - PullRequest
18 голосов
/ 19 мая 2009

Я просматриваю HTML-документ, используя JavaScript DOM. Я хочу сделать список (на самом деле массив) всех узлов / элементов и их значений. Я нашел скрипт для обхода DOM, но как мне сохранить значение каждого узла в массиве. Я не могу найти уникальный идентификатор для узла. У кого-нибудь есть указатели? Я думал о xpath или о чем-то.

Целесообразно ли рассматривать xpath для узла в качестве уникального идентификатора. Если да, то как мне получить xpath элемента при обходе DOM?

Ответы [ 2 ]

20 голосов
/ 19 мая 2009

Будучи программистом, рожденным и воспитанным в мире C и C ++, мой первый ответ на этот вопрос был бы "хранить их адреса в массиве!" Но после пары лет возни с сетью, я могу дать правильный ответ:

В javascript вы можете напрямую хранить ссылки на объекты в массиве. И нет, xpath не очень хорошая идея для этого; использовать ссылки проще и лучше. Итак, прямой ответ на ваш вопрос: нет уникального идентификатора для элемента / узла DOM, кроме самого .

В javascript все объекты передаются по ссылке. Вот пример кода, как это сделать:

var theArray = [];
var theNodeToTraverse = document.getElementById('domelementtosearch');

traverseAndStore(theNodeToTraverse);

function traverseAndStore( node )
{
    if( node==null) return;
    theArray[ theArray.length ] = node;
    for( i=0; i<node.childNodes.length; i++ )
        traverseAndStore( node.childNodes[i] );
}
0 голосов
/ 21 марта 2016

Вы можете получить что-то похожее на xpath с чем-то вроде этого. Он пересекает dom вверх от элемента input через свойство parentNode.

https://gist.github.com/sebjwallace/3c0a6f7493ce23134516

Будет выведена строка, подобная этой.

"# документ / HTML / BODY / DIV"

var getElementPath = function(el){
  var path = el.nodeName;
  var parent = el.parentNode;
  while(parent){
    path = parent.nodeName + '/' + path;
    parent = parent.parentNode;
  }
  return path;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...