Falls das Element kein ID-Attribut hat, möchte ich eine Art eindeutigen Bezeichner generieren, der das Element identifiziert.

Gibt es eine Funktion, mit der ich den Objekt-Hash des DOM-Elementobjekts erhalten kann, ähnlich wie spl_object_hash in PHP? Das wäre einzigartig genug.

4
thelolcat 30 Nov. 2013 im 18:52

3 Antworten

Beste Antwort

Versuche dies :

var uid = function (i) {
    return function () { 
        return 'prefix-' + (++i); 
    };
}(0);

Verwendung :

uid(); // "prefix-1"
uid(); // "prefix-2"
if (!el.id) el.id = uid(); // "prefix-3"
3
leaf 30 Nov. 2013 im 16:04

In JavaScript gibt es keinen "Objekt-Hash". Sie können Ihren eigenen Zähler einrichten, um nicht verwendete "ID" -Werte zu erstellen.

var getUnusedId = function() {
   var counter = 0;
   return function(prefix) {
     prefix = prefix || "thelolcat";
     var theId;
     while (document.getElementById(theId = prefix + counter++));
     return theId;
   };
}();

Das gibt Ihnen eine Funktion, die Sie aufrufen können, um eine ID wie "thelolcat203" zu erhalten. Jedes Mal, wenn Sie es aufrufen, wird der Zähler erhöht und der neue Wert überprüft, um sicherzustellen, dass das Dokument kein solches Element enthält.

Dies ist nicht ganz sicher, da Sie nicht sicher sind, ob einige dynamisch hinzuzufügende Inhalte nicht dieselbe ID haben, aber es ist nicht allzu schwierig, mit einer Konvention zu arbeiten, die dies ermöglicht Es ist ziemlich unwahrscheinlich, dass es zu Kollisionen kommt. (Die jQuery-Bibliothek erledigt dies sowieso intern.)

1
Pointy 30 Nov. 2013 im 14:55

Das wäre für den Browser lächerlich anstrengend. Was Sie beschreiben, kann mit bereits in JS integrierten Dingen ausgeführt werden. Geben Sie ihnen entweder automatisch IDs über JS oder Sie können sie über Klassen, Kinder, Eltern, Tag-Namen usw. auswählen.

1
Deryck 30 Nov. 2013 im 14:56