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)

25
demandé sur Deduplicator 2010-07-21 15:03:38

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;
  };
}());
17
répondu RoToRa 2010-07-21 11:14:30

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.

4
répondu Gordon 2010-07-21 11:16:17

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.

2
répondu Pekka 웃 2010-07-21 11:05:44

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

2
répondu DonO 2015-03-11 18:40:36

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.

0
répondu risto 2015-02-06 12:07:19

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)
0
répondu AsGoodAsItGets 2017-07-06 15:11:59