$("*").click(function(){
$(this); // how can I get selector from $(this) ?
});
Existe-t-il un moyen facile d' obtenir un sélecteur$(this)
? Il existe un moyen de sélectionner un élément par son sélecteur, mais qu'en est-il d'obtenir le sélecteur à partir de l'élément ?
Réponses:
Ok, donc dans un commentaire ci-dessus, le demandeur a
Fidilip
dit que ce qu'il cherchait vraiment est d'obtenir le chemin vers l'élément actuel.Voici un script qui "grimpera" dans l'arborescence des ancêtres du DOM, puis construira un sélecteur assez spécifique incluant tout
id
ou desclass
attributs sur l'élément cliqué.Voyez-le fonctionner sur jsFiddle: http://jsfiddle.net/Jkj2n/209/
Par exemple, si vous cliquez sur le 2e élément de liste imbriquée dans le code HTML ci-dessous, vous obtiendrez le résultat suivant:
HTML>BODY>UL>LI>UL>LI#sub2.subitem.otherclass
la source
join(" > ");
, me donnera les enfants immédiats et donc un chemin plus strict .:: AVERTISSEMENT ::
.selector est obsolète depuis la version 1.7, supprimé depuis la 1.9
L'objet jQuery a une propriété de sélecteur que j'ai vue en creusant dans son code hier. Je ne sais pas si elle est définie dans la documentation et à quel point elle est fiable (pour une épreuve future). Mais ça marche!
Modifier : Si vous deviez trouver le sélecteur à l'intérieur de l'événement, ces informations devraient idéalement faire partie de l'événement lui-même et non de l'élément, car un élément pourrait avoir plusieurs événements de clic attribués via divers sélecteurs. Une solution serait d'utiliser un wrapper autour
bind()
,click()
etc. pour ajouter des événements au lieu de l'ajouter directement.Le sélecteur est passé en tant que propriété d'un objet nommé
selector
. Accédez-y en tant queevent.data.selector
.Essayons-le sur un balisage ( http://jsfiddle.net/DFh7z/ ):
Avertissement : N'oubliez pas que, tout comme pour les
live()
événements, la propriété selector peut être invalide si les méthodes de traversée DOM sont utilisées.Le code ci-dessous ne fonctionnera PAS, car il
live
repose sur la propriété selector qui dans ce cas esta.parent()
- un sélecteur invalide.Notre
addEvent
méthode se déclenchera, mais vous verrez vous aussi le mauvais sélecteur -a.parent()
.la source
No Such jQuery Method Exists
En collaboration avec @drzaus, nous avons mis au point le plugin jQuery suivant.
jQuery.getSelector
Javascript minifié
Utilisation et Gotchas
Tests de violon avec QUnit
http://jsfiddle.net/CALY5/5/
la source
$.map
* délimiteur facultatif (doit supprimer les noms de balises vides étranges) * n'avez-vous pas besoin de vérifierhasOwnProperty
uneforeach
boucle pour être en sécurité?' > '
ferait ne pas renvoyer le sélecteur d'élément.Avez-vous essayé cela?
la source
*
sélecteur, il est très lent!J'ai publié un plugin jQuery: jQuery Selectorator , vous pouvez obtenir un sélecteur comme celui-ci.
la source
Essaye ça:
la source
Ajoutez simplement une couche sur la fonction $ de cette façon:
Maintenant tu peux faire des choses comme
et renverra "a" même sur les nouvelles versions de jQuery.la source
http://www.selectorgadget.com/ est un bookmarklet conçu explicitement pour ce cas d'utilisation.
Cela dit, je suis d'accord avec la plupart des autres personnes sur le fait que vous devriez simplement apprendre les sélecteurs CSS vous-même, essayer de les générer avec du code n'est pas durable. :)
la source
J'ai ajouté quelques correctifs au correctif de @ jessegavin.
Cela reviendra tout de suite s'il y a un identifiant sur l'élément. J'ai également ajouté une vérification d'attribut de nom et un sélecteur de nième enfant au cas où un élément n'aurait pas d'identifiant, de classe ou de nom.
Le nom peut nécessiter une portée au cas où il y aurait plusieurs formulaires sur la page et auraient des entrées similaires, mais je ne l'ai pas encore géré.
la source
J'obtenais plusieurs éléments même après les solutions ci-dessus, donc j'ai étendu le travail de dds1024, pour encore plus d'élément dom pointant.
par exemple DIV: nth-child (1) DIV: nth-child (3) DIV: nth-child (1) ARTICLE: nth-child (1) DIV: nth-child (1) DIV: nth-child (8) DIV : nth-child (2) DIV: nth-child (1) DIV: nth-child (2) DIV: nth-child (1) H4: nth-child (2)
Code:
la source
Cela peut vous permettre de sélectionner le chemin de l'élément HTML cliqué.
la source
Eh bien, j'ai écrit ce simple plugin jQuery.
Cela vérifie l'identifiant ou le nom de la classe et essaie de donner autant de sélecteur exact que possible.
la source
Essayez-vous d'obtenir le nom du tag actuel sur lequel l'utilisateur a cliqué?
Si oui, faites ceci.
Vous ne pouvez pas vraiment obtenir le "sélecteur", le "sélecteur" dans votre cas l'est
*
.la source
Code Javascript pour le même, au cas où quelqu'un en aurait besoin, comme j'en avais besoin. Ceci n'est que la traduction de la réponse sélectionnée ci-dessus.
la source
En tenant compte de quelques réponses lues ici, j'aimerais proposer ceci:
Peut-être utile pour créer un plugin jQuery?
la source
Merci p1nox!
Mon problème était de remettre le focus sur un appel ajax qui modifiait une partie du formulaire.
J'avais juste besoin d'encapsuler votre fonction dans un plugin jQuery:
la source
Cela ne vous montrera pas le chemin du DOM, mais il affichera une représentation sous forme de chaîne de ce que vous voyez par exemple dans le débogueur Chrome, lors de la visualisation d'un objet.
https://developer.chrome.com/devtools/docs/console-api#consolelogobject-object
la source
Que diriez-vous:
Je ne crois pas que jQuery stocke le texte du sélecteur qui a été utilisé. Après tout, comment cela fonctionnerait-il si vous faisiez quelque chose comme ceci:
la source
$('div').find('a').selector
estdiv a
. Si les événements ne sont pas créés via les fonctions jQuery, mais un wrapper à la place, je pense que le sélecteur pourrait être passé en tant qu'arguments de données au gestionnaire d'événements.La meilleure réponse serait
la source