$("*").click(function(){
$(this); // how can I get selector from $(this) ?
});
Gibt es eine einfache Möglichkeit, einen Selektor$(this)
zu erhalten ? Es gibt eine Möglichkeit, ein Element anhand seines Selektors auszuwählen, aber wie sieht es aus , wenn der Selektor vom Element abgerufen wird ?
Antworten:
Ok, also
Fidilip
sagte der Fragesteller in einem Kommentar oben , dass er / sie wirklich danach strebt , den Weg zum aktuellen Element zu finden.Hier ist ein Skript, das den DOM-Ahnenbaum "klettert" und dann einen ziemlich spezifischen Selektor erstellt, einschließlich eines
id
oderclass
mehrerer Attribute für das angeklickte Element.Sehen Sie, wie es auf jsFiddle funktioniert: http://jsfiddle.net/Jkj2n/209/
Wenn Sie beispielsweise auf das zweite Listenelement mit verschachtelter Liste im folgenden HTML-Code klicken, erhalten Sie das folgende Ergebnis:
HTML>BODY>UL>LI>UL>LI#sub2.subitem.otherclass
quelle
join(" > ");
, wird mir die unmittelbaren Kinder und damit einen strengeren Pfad geben.::
WARNUNG :: .selector ist ab Version 1.7 veraltet und ab Version 1.9 entfernt
Das jQuery-Objekt hat eine Selector-Eigenschaft, die ich gestern beim Eingraben seines Codes gesehen habe. Ich weiß nicht, ob es in den Dokumenten definiert ist, wie zuverlässig es ist (für die Zukunftssicherung). Aber es funktioniert!
Bearbeiten : Wenn Sie den Selektor innerhalb des Ereignisses finden, sollten diese Informationen idealerweise Teil des Ereignisses selbst und nicht des Elements sein, da einem Element mehrere Klickereignisse über verschiedene Selektoren zugewiesen werden können. Eine Lösung wäre, einen Wrapper zu verwenden
bind()
,click()
um Ereignisse usw. hinzuzufügen, anstatt sie direkt hinzuzufügen.Der Selektor wird als Eigenschaft eines Objekts mit dem Namen übergeben
selector
. Greifen Sie als zuevent.data.selector
.Versuchen wir es mit einem Markup ( http://jsfiddle.net/DFh7z/ ):
Haftungsausschluss : Beachten Sie, dass
live()
die Selector-Eigenschaft genau wie bei Ereignissen ungültig sein kann, wenn DOM-Traversal-Methoden verwendet werden.Der folgende Code funktioniert NICHT, da er
live
von der Selector-Eigenschaft abhängt, die in diesem Falla.parent()
ein ungültiger Selector ist.Unsere
addEvent
Methode wird ausgelöst, aber auch Sie werden den falschen Selektor sehen -a.parent()
.quelle
No Such jQuery Method Exists
In Zusammenarbeit mit @drzaus haben wir das folgende jQuery-Plugin entwickelt.
jQuery.getSelector
Minimiertes Javascript
Verwendung und Fallstricke
Geige mit QUnit-Tests
http://jsfiddle.net/CALY5/5/
quelle
$.map
* Optionales Trennzeichen (muss seltsame leere Tag-Namen entfernen) * Müssen Sie nichthasOwnProperty
in einerforeach
Schleife einchecken , um sicher zu sein?' > '
dazu führen würde, dass der Selektor des Elements nicht zurückgegeben wird.Hast du das versucht?
quelle
*
Selektor nicht zu benutzen , er ist sehr langsam!Ich habe ein jQuery-Plugin veröffentlicht: jQuery Selectorator , Sie können Selector wie folgt erhalten.
quelle
Versuche dies:
quelle
Fügen Sie einfach eine Ebene über der $ -Funktion hinzu:
Jetzt können Sie Dinge wie tun
und gibt auch bei neueren jQuery-Versionen "a" zurück.quelle
http://www.selectorgadget.com/ ist ein Lesezeichen, das explizit für diesen Anwendungsfall entwickelt wurde.
Trotzdem stimme ich den meisten anderen Menschen darin zu, dass Sie CSS-Selektoren nur selbst lernen sollten. Der Versuch, sie mit Code zu generieren, ist nicht nachhaltig. :) :)
quelle
Ich habe @ jessegavins Fix einige Korrekturen hinzugefügt.
Dies wird sofort zurückgegeben, wenn das Element eine ID enthält. Ich habe auch eine Namensattributprüfung und einen n-ten untergeordneten Selektor hinzugefügt, falls ein Element keine ID, Klasse oder keinen Namen hat.
Der Name muss möglicherweise überprüft werden, falls mehrere Formulare auf der Seite vorhanden sind und ähnliche Eingaben vorliegen, aber das habe ich noch nicht behandelt.
quelle
Ich habe sogar nach den oben genannten Lösungen mehrere Elemente erhalten, daher habe ich die Arbeit mit dds1024 erweitert, um ein noch genaueres dom-Element zu erhalten.
zB DIV: n-tes Kind (1) DIV: n-tes Kind (3) DIV: n-tes Kind (1) ARTIKEL: n-tes Kind (1) DIV: n-tes Kind (1) DIV: n-tes Kind (8) DIV : n-tes Kind (2) DIV: n-tes Kind (1) DIV: n-tes Kind (2) DIV: n-tes Kind (1) H4: n-tes Kind (2)
Code:
quelle
Dies kann Ihnen den Auswahlpfad des angeklickten HTML-Elements anzeigen.
quelle
Nun, ich habe dieses einfache jQuery-Plugin geschrieben.
Dies überprüft die ID oder den Klassennamen und versucht, so genau wie möglich zu wählen.
quelle
Versuchen Sie, den Namen des aktuellen Tags abzurufen, auf das geklickt wurde?
Wenn ja, mach das ..
Sie können den "Selektor" nicht wirklich bekommen, der "Selektor" in Ihrem Fall ist
*
.quelle
Javascript-Code für das gleiche, falls jemand es braucht, wie ich es brauchte. Dies ist nur die Übersetzung nur der oben ausgewählten Antwort.
quelle
Unter Berücksichtigung einiger hier gelesener Antworten möchte ich Folgendes vorschlagen:
Vielleicht nützlich, um ein jQuery-Plugin zu erstellen?
quelle
Danke p1nox!
Mein Problem bestand darin, mich wieder auf einen Ajax-Aufruf zu konzentrieren, der einen Teil des Formulars veränderte.
Ich musste nur Ihre Funktion in ein jQuery-Plugin kapseln:
quelle
Dies zeigt Ihnen nicht den DOM-Pfad an, gibt jedoch eine Zeichenfolgendarstellung dessen aus, was Sie beispielsweise im Chrome-Debugger sehen, wenn Sie ein Objekt anzeigen.
https://developer.chrome.com/devtools/docs/console-api#consolelogobject-object
quelle
Wie wäre es mit:
Ich glaube nicht, dass jQuery den verwendeten Auswahltext speichert. Wie würde das funktionieren, wenn Sie so etwas tun würden:
quelle
$('div').find('a').selector
isdiv a
. Wenn die Ereignisse nicht über die jQuery-Funktionen, sondern über einen Wrapper erstellt werden, kann der Selektor meines Erachtens als Datenargumente an den Ereignishandler übergeben werden.Die beste Antwort wäre
quelle