Каков уникальный идентификатор элемента DOM/node
Я просматриваю HTML-документ, используя javascript DOM. Я хочу составить список (фактически массив) всех узлов/элементов и их значений. Я нашел script для перемещения DOM, но как сохранить каждое значение node в массиве. Кажется, я не могу найти уникальный идентификатор для node. У кого-нибудь есть указатели? Я думал о xpath
или о чем-то.
Это хорошая идея рассмотреть xpath
для node как уникальный идентификатор. Если да, то как мне получить xpath
элемента при обходе DOM?
Ответы
Ответ 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;
}