Wie generiere ich einen eindeutigen CSS-Selektor für das DOM-Element?

9

Ich muss einen eindeutigen CSS-Selektor für Elemente erzeugen.
Insbesondere habe ich onclick Event-Handler, die sich erinnern sollten, welches Zielelement wurde geklickt und diese Info an meinen Server gesendet. Gibt es eine Möglichkeit, dies ohne DOM-Modifikationen zu tun?

P.S. mein JavaScript-Code soll auf verschiedenen
laufen Websites von Drittanbietern, so kann ich keine Annahmen über HTML machen.

    
tsds 21.12.2011, 10:23
quelle

6 Antworten

1

Nehmen wir an, Sie haben der Einfachheit halber eine Liste von Links: Sie können einfach den Index des auslösenden Elements in der Sammlung aller Elemente übergeben

%Vor%

die js (jQuery 1.7+, ich habe .on() verwendet sonst% bind() ) Funktion kann

sein %Vor%

, so dass, wenn Sie auf den dritten Element-Indexwert klicken, der Wert 2 ist. (0-basierter Index); Dies gilt natürlich, solange sich der Code (das DOM) nicht ändert. Später können Sie diesen Index verwenden, um eine CSS-Regel für dieses Element zu erstellen, z. mit :nth-child

Andernfalls, wenn jedes Ihrer Elemente ein anderes Attribut (wie eine ID) hat, können Sie dieses Attribut übergeben

Beispiel für JsFiddle: Ссылка

    
fcalderan 21.12.2011, 10:32
quelle
3

Ja, das könntest du tun. Aber mit ein paar Vorbehalten. Um sicherzustellen, dass Selektoren eindeutig sind, müssen Sie :nth-child() verwenden, was nicht allgemein unterstützt wird. Wenn Sie diese CSS-Selektoren dann in CSS-Dateien einfügen möchten, funktioniert dies nicht in allen Browsern.

Ich würde es mit so etwas tun:

%Vor%

Fügen Sie das dann Ihrem Click-Handler für jedes Element hinzu, das Sie modellieren möchten. Ich überlasse es Ihnen, getChildNumber() zu implementieren.

Bearbeiten: Habe gerade deinen Kommentar dazu gelesen, dass es sich um einen 3rd-Party-Code handelt ... also kannst du ein event -Argument hinzufügen, alle Instanzen von this durch event.target ersetzen und dann einfach anhängen die Funktion zu window click event, wenn das einfacher ist.

    
Nathan MacInnes 21.12.2011 10:35
quelle
1

Sie könnten wahrscheinlich den DOM-Baum vom Knoten zurück zum body-Element durchqueren, um einen Selektor zu erzeugen.

Firebug verfügt über eine Funktion, die beide XPath- und CSS-Selektoren verwendet.

Siehe diese Antwort

    
Jani Hartikainen 21.12.2011 10:29
quelle
1
%Vor%

Sie können dies versuchen. ohne jquery zu benutzen.

    
Maneesh Singh 11.09.2014 07:07
quelle
1
___ qstnhdr ___ Wie generiere ich einen eindeutigen CSS-Selektor für das DOM-Element? ___ qstntxt ___

Ich muss einen eindeutigen CSS-Selektor für Elemente erzeugen.
Insbesondere habe ich onclick Event-Handler, die sich erinnern sollten, welches Zielelement wurde geklickt und diese Info an meinen Server gesendet. Gibt es eine Möglichkeit, dies ohne DOM-Modifikationen zu tun?

P.S. mein JavaScript-Code soll auf verschiedenen
laufen Websites von Drittanbietern, so kann ich keine Annahmen über HTML machen.

    
___ answer8588366 ___

Sie könnten wahrscheinlich den DOM-Baum vom Knoten zurück zum body-Element durchqueren, um einen Selektor zu erzeugen.

Firebug verfügt über eine Funktion, die beide XPath- und CSS-Selektoren verwendet.

Siehe diese Antwort

    
___ answer8588452 ___

Ja, das könntest du tun. Aber mit ein paar Vorbehalten. Um sicherzustellen, dass Selektoren eindeutig sind, müssen Sie %code% verwenden, was nicht allgemein unterstützt wird. Wenn Sie diese CSS-Selektoren dann in CSS-Dateien einfügen möchten, funktioniert dies nicht in allen Browsern.

Ich würde es mit so etwas tun:

%Vor%

Fügen Sie das dann Ihrem Click-Handler für jedes Element hinzu, das Sie modellieren möchten. Ich überlasse es Ihnen, %code% zu implementieren.

Bearbeiten: Habe gerade deinen Kommentar dazu gelesen, dass es sich um einen 3rd-Party-Code handelt ... also kannst du ein %code% -Argument hinzufügen, alle Instanzen von %code% durch %code% ersetzen und dann einfach anhängen die Funktion zu %code% click event, wenn das einfacher ist.

    
___ answer49663134 ___

Diese Funktion erstellt einen langen, aber praktischen Selektor, der schnell arbeitet.

%Vor%

Beispielergebnis:

%Vor%

Der folgende Code erstellt einen etwas schöneren und kürzeren Selektor

%Vor%

Beispielergebnis:

%Vor%     
___ tag123javascript ___ JavaScript (nicht zu verwechseln mit Java) ist eine dynamische Sprache mit mehreren Paradigmen auf hoher Ebene, die sowohl für das clientseitige als auch für das serverseitige Scripting verwendet wird. Verwenden Sie dieses Tag für Fragen zu ECMAScript und seinen verschiedenen Dialekten / Implementierungen (außer ActionScript und Google-Apps-Script). ___ tag123dom ___ Verwenden Sie dieses Tag bei Fragen zur Interaktion anderer Sprachen mit XML / HTML über das Dokumentobjektmodell. Verwenden Sie es nicht als Abkürzung für HTML, JavaScript oder SAX - verwenden Sie zusätzliche Tags, um sowohl Sprache als auch Markup zu kennzeichnen. ___ answer25781207 ___
%Vor%

Sie können dies versuchen. ohne jquery zu benutzen.

    
___ answer48899545 ​​___

Überprüfen Sie diese CSS-Auswahlgeneratorbibliothek @ medv / finder

  • Erzeugt kürzeste Selektoren
  • Eindeutige Selektoren pro Seite
  • Stabile und robuste Selektoren
  • 2,9 kB gzip und Größe verkleinern

Beispiel für generierten Selektor:

%Vor%     
___ tag123cssselectors ___ Selektoren sind Muster, die mit Elementen in einer Dokumentstruktur übereinstimmen. In einer CSS-Regel werden sie verwendet, um Stile für Elemente zu definieren, die dem Muster entsprechen. ___ answer8588404 ___

Nehmen wir an, Sie haben der Einfachheit halber eine Liste von Links: Sie können einfach den Index des auslösenden Elements in der Sammlung aller Elemente übergeben

%Vor%

die js (jQuery 1.7+, ich habe %code% verwendet sonst% %code% ) Funktion kann

sein %Vor%

, so dass, wenn Sie auf den dritten Element-Indexwert klicken, der Wert 2 ist. (0-basierter Index); Dies gilt natürlich, solange sich der Code (das DOM) nicht ändert. Später können Sie diesen Index verwenden, um eine CSS-Regel für dieses Element zu erstellen, z. mit %code%

Andernfalls, wenn jedes Ihrer Elemente ein anderes Attribut (wie eine ID) hat, können Sie dieses Attribut übergeben

Beispiel für JsFiddle: Ссылка

    
___
Anton Medvedev 21.02.2018 06:36
quelle
1

Diese Funktion erstellt einen langen, aber praktischen Selektor, der schnell arbeitet.

%Vor%

Beispielergebnis:

%Vor%

Der folgende Code erstellt einen etwas schöneren und kürzeren Selektor

%Vor%

Beispielergebnis:

%Vor%     
redisko 05.04.2018 02:18
quelle

Tags und Links