Identifiant Unique pour les éléments HTML
Outre L'ID, si vous dites, vous voulez un identifiant unique pour un élément HTML (disons un div).
J'ai parcouru le DOM pour quelque chose (comme un nombre ou une chaîne) qui est unique pour chaque élément; mais le DOM est grand et j'ai échoué à trouver cela sur Internet.
Y a-t-il une propriété (dans le DOM évidemment) qui est unique seulement à cet élément? (Autre que L'ID et aussi vous ne le spécifiez pas, mais vient quand le DOM est construit)
6 réponses
Comme le dit Pekka, il serait plus facile de décrire ce que vous voulez faire. Jusqu'alors, voici deux suggestions.
Sauf si vous avez réellement besoin d'exprimer l'id comme une sorte de chaîne, vous pouvez enregistrer la référence DOM normale.
Si vous avez besoin de l'exprimer sous forme de chaîne pour une raison quelconque, vous devrez attribuer vous-même un identifiant unique.
var getId = (function () {
var incrementingId = 0;
return function(element) {
if (!element.id) {
element.id = "id_" + incrementingId++;
// Possibly add a check if this ID really is unique
}
return element.id;
};
}());
Le seul autre identifiant auquel je peux penser est le XPath de l'élément dans le document.
Par exemple, le lien de titre à l'intérieur de l'en-tête de cette page a un XPath de
/html/body/div[3]/div[2]/div/h1/a
Mais comme Pekka l'a déjà dit, Cela dépend de ce que vous voulez faire. Et je ne pense pas que vous pouvez obtenir le Xpath facilement à partir du DOM en JavaScript, bien que Xpath soit disponible de nos jours dans les moteurs JS.
Il y a l'attribut name
qui peut être des adresses par document.getElementByName
.
Je ne pense pas qu'il existe d'autres identifiants uniques - même si vous pouvez en simuler un en définissant une propriété (comme title
) sur une valeur unique, puis en demandant cela. Mais c'est encombrants.
Pour quoi avez-vous besoin exactement? Si vous donnez plus d'informations sur votre situation, quelqu'un viendra probablement avec une suggestion.
Internet explorer a une propriété "uniqueID" pour chaque élément. Le problème est que les autres navigateurs ne le supportent pas.
Vous pouvez utiliser une bibliothèque ou lancer la vôtre pour créer un identifiant unique. JQuery a .données():
Stocke des données arbitraires associées aux éléments correspondants ou renvoie la valeur au magasin de données nommé pour le premier élément de l'ensemble de éléments qui correspondent.
Je viens de rencontrer la même situation, et pendant que je regardais certains éléments DOM dans L'inspecteur Chrome dev tools, j'ai remarqué qu'ils semblent tous avoir une propriété comme jQuery11230892710877873282
assignée avec un numéro unique. Évidemment, le nombre après 'jQuery' est différent chaque fois que vous chargez la page, je suppose que jQuery génère cela en interne chaque fois qu'il essaie d'accéder ou de manipuler n'importe quel élément DOM. J'ai joué un peu avec, et il ressemble à des éléments qui ne sont jamais accédé/manipulé par jQuery peut ne pas avoir cette propriété, mais au moment où vous faites quelque chose comme $(elem)
la propriété sera là. Donc, puisque nous utilisons à la fois jQuery et lodash, j'ai conçu la fonction suivante Pour renvoyer un ID unique, que l'élément ait ou non un attribut dom id.
_.reduce($(elem), function(result, value, key) { if(_.startsWith(key, 'jQuery')) return value; }, 0)