web-dev-qa-db-fra.com

Identifiant unique pour les éléments HTML

En plus de l'ID, si vous dites, vous voulez un identifiant unique pour un élément HTML (disons un div).

J'ai parcouru le DOM pour trouver quelque chose (comme un nombre ou une chaîne) unique pour chaque élément; mais le DOM est grand et je n'ai pas réussi à le trouver sur Internet.

Y at-il une propriété (dans le DOM évidemment) qui est unique à cet élément? (Autre que l'ID et aussi vous ne le spécifiez pas, mais vient quand le DOM est construit)

25
Omar Abid

Comme le dit Pekka, il serait plus facile de décrire ce que vous voulez faire. En attendant, voici deux suggestions.

Sauf si vous devez réellement exprimer l'ID sous forme 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 alors 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;
  };
}());
17
RoToRa

Le seul autre identifiant auquel je puisse penser est le XPath de l'élément dans le document.

Par exemple, le lien du 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 puissiez facilement obtenir le Xpath à partir du DOM en JavaScript, bien que Xpath soit disponible de nos jours dans les moteurs JS.

4
Gordon

Il y a l'attribut name qui peut être une adresse par document.getElementByName.

Je ne pense pas qu'il existe d'autres identificateurs uniques, même si vous pouvez en simuler un en définissant une propriété (telle que title) sur une valeur unique, puis en effectuant une requête. Mais c'est kludgy.

Pourquoi avez-vous besoin de cela? Si vous donnez plus d'informations sur votre situation, quelqu'un vous proposera probablement une suggestion.

2
Pekka 웃

Internet Explorer a une propriété "uniqueID" pour chaque élément. Le problème est que les autres navigateurs ne le prennent pas en charge.

2
DonO

Vous pouvez utiliser une bibliothèque ou rouler la vôtre pour créer un identifiant unique. JQuery a .data () :

Stockez des données arbitraires associées aux éléments correspondants ou renvoyez Dans le magasin de données nommé pour le premier élément de l'ensemble de Éléments correspondants.

0
risto

Je viens de rencontrer la même situation et, alors que j'examinais certains éléments du DOM dans l'inspecteur d'outils de développement de Chrome, j'ai remarqué qu'ils semblaient tous se voir attribuer une propriété comme jQuery11230892710877873282 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 le génère en interne chaque fois qu'il tente d'accéder à un élément du DOM ou de le manipuler. J'ai un peu joué dessus, et il semble que les éléments qui ne sont jamais utilisés/manipulés par jQuery n'aient pas cette propriété, mais au moment où vous faites quelque chose comme $(elem), la propriété sera là. Donc, comme 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)
0
AsGoodAsItGets