10
votes

jquery: obtenez un sélecteur d'origine

Je suis au milieu d'écrire un plugin et je voudrais pouvoir obtenir le sélecteur d'origine que JQuery a utilisé l'objet.

Donc, si vous vouliez appliquer quelque chose comme idflings () Vous pouvez obtenir toutes les frères et sœurs de ce type, qu'il s'agisse de frères et sœurs d'une certaine classe ou de frères et sœurs d'un certain type d'élément. < / p>

  • jQuery ('div') - 'div'
  • jQuery (jQuery ('div')) - '[jQuery] objet' // nécessiterait de rechercher récursivement le sélecteur de ce
  • jQuery ('# eLment') - '# élément'
  • jQuery ('. classe') - '. Classe'

0 commentaires

3 Réponses :


9
votes

Il suffit d'accéder au sélecteur code> propriété:

console.log($("div").selector); // 'div'
console.log($("#foo").selector); // '#foo'


8 commentaires

Est-ce que vous plaisantez!? Je suis allé dans api.jquery.com et cherché sélecteur et tout ce qu'il a sauté était le "[ancêtre descendant]" BS et typique jQuery ("[sélecteur]") non-sens ... aucune aide. -- Merci! - Savez-vous où se trouve la documentation?


@ Vol7ron - Je ne pense pas que cela soit documenté. Venez penser à cela, je ne me souviens pas comment je l'ai découvert.


Malheureusement, jQuery ('. Nom de classe'). chacun (fonction () {jQuery (this) .selector}); renvoie une chaîne vide;


Vous pouvez le voir ici: code.jquery.com/jquery-1.6.2.js Regardez dans la fonction init . Il a une ligne comme ceci: ceci.selector = sélecteur; si le sélecteur est en chaîne. Si le sélecteur est sur un objet avec une propriété de sélecteur, il a ceci: ceci.selector = sélecteur.selector.selector; il gérera même le cas "récursif"


@ Vol7ron - c'est parce que jQuery (this) construit un objet jQuery avec un domemilement au lieu d'un sélecteur.


Droite, j'aimerais que cela revienne des objets pour ces cas, que je pourrais vérifier.


Je suppose que je devrais stocker l'objet d'origine dans une variable tempe et l'appeler à ce sujet? var t = $ ('. CNAME'); t.ach (fonction () {$ (ceci) .Data ('sélecteur', t.selector)}); - quelque chose à cet effet


.Selector La propriété a été obsolète en 1.7



2
votes

comme une extension de ce que Karim a mis: xxx


1 commentaires

Je ne suis pas sûr qu'il y ait un moyen de faire référence au constructeur de racine JQuery de l'objet DOM, comme vous l'avez noté. J'ai donc pris cela que la mise en cache de l'objet JQuery était la seule façon. (Je n'ai fait qu'une réponse que je l'avais pour une référence future)



6
votes

Cela ne semble plus possible ... ".elector" a été supprimé dans la version 3 et JQuery recommande plutôt de passer deux fois dans le sélecteur.

https://apl.jquerery.com/selector/ ....

La propriété .Selector a été obsolète dans JQuery 1.7 et n'est maintenue que dans la mesure nécessaire pour soutenir .Live () dans le plug-in jQuery migrer. Il peut être supprimé sans préavis dans une version future. La propriété n'a jamais été un indicateur fiable du sélecteur qui pourrait être utilisé pour obtenir l'ensemble des éléments actuellement contenus dans le jeu de jQuery dans lequel il s'agissait d'une propriété, car les méthodes trershases ultérieures peuvent avoir modifié l'ensemble. plugins Cela doit utiliser une chaîne de sélecteur dans leur plug-in peut nécessiter un paramètre de la méthode. Par exemple, un plug-in "foo" pourrait être écrit comme $ .fn.foo = fonction (sélecteur, options) {/ * Le code du plug-in est ici * /}; et la personne utilisant le plug-in écrirait $ ("Div.Bar ") .foo (" div.bar ", {chien:" aboyer "}); avec le sélecteur "div.bar" répété comme premier argument de .foo () .


3 commentaires

Bonne mise à jour - on dirait que le contexte + les propriétés de sélecteur ont été abandonnés. Curieux de l'incorporer dans la réponse sélectionnée - devrait-il être ajouté comme un commentaire à cette réponse à la place?


Je viens d'ajouter un commentaire aussi bien basé sur vos commentaires. Cependant, je suis hésitant à le faire à la place d'une nouvelle réponse depuis de nombreuses (ou du moins de moi;)) Scannez bien les réponses avant de creuser dans les commentaires individuels. Si ma réponse est correcte, éventuellement une "mise à jour" sur la réponse d'origine serait probablement une bonne idée.


C'est ce que je ressens aussi, je suis incertain comment gérer cela pour les différentes versions de JQuery