Подтвердить что ты не робот

Каков уникальный идентификатор элемента DOM/node

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

Это хорошая идея рассмотреть xpath для node как уникальный идентификатор. Если да, то как мне получить xpath элемента при обходе DOM?

4b9b3361

Ответ 1

Как программист, родившийся и выросший в мире C и С++, мой первый ответ на этот вопрос был бы "хранить их адреса в массиве!". Но через пару лет возиться с веб-способом вещей, я могу дать правильный ответ:

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

В 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] );
}

Ответ 2

Вы можете получить что-то похожее на xpath с чем-то вроде этого. Он перемещает dom вверх из входного элемента через свойство 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;
}