116 votes

Comment puis-je le sélecteur d’objet jQuery

<pre><code></code><p><strong>obtenir le sélecteur de $(this)</strong> <strong>que diriez-vous d’obtenir sélecteur d’élément</strong>?</p><p>Merci pour toute aide =)</p></pre>

59voto

jessegavin Points 20854

Ok, donc dans un commentaire ci-dessus la question asker Fidilip a dit que ce qu'il/elle est vraiment après c'est pour obtenir le chemin d'accès à l'élément courant.

Voici un script qui va "monter" le DOM ancêtre de l'arbre, et ensuite construire assez précis sélecteur y compris tout id ou class attributs de l'élément cliqué.

Le voir travailler sur jsFiddle: http://jsfiddle.net/Jkj2n/56/

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
    $(function() {
      $("*").click(function() {
        var selector = $(this).parents()
                    .map(function() { return this.tagName; })
                    .get().reverse().join(" ");

        if (selector) { 
          selector += " "+ $(this)[0].nodeName;
        }

        var id = $(this).attr("id");
        if (id) { 
          selector += "#"+ id;
        }

        var classNames = $(this).attr("class");
        if (classNames) {
          selector += "." + $.trim(classNames).replace(/\s/gi, ".");
        }

        alert(selector);
        return false;
      });
    });
    </script>
</head>
<body>
<h1><span>I love</span> jQuery</h1>
<div>
  <p>It's the <strong>BEST THING</strong> ever</p>
  <button id="myButton">Button test</button>
</div>
<ul>
  <li>Item one
    <ul>
      <li id="sub2" >Sub one</li>
      <li id="sub2" class="subitem otherclass">Sub two</li>
    </ul>
  </li>
</ul>
</body>
</html>

Par exemple, si vous cliquez sur le 2ème de la liste imbriquée élément de la liste dans le code HTML ci-dessous, vous obtenez le résultat suivant:

HTML BODY UL LI UL LI#sub2.subitem.otherclass

35voto

Anurag Points 66470

AVERTISSEMENT .sélecteur de version obsolète: 1.7, supprimé: 1.9

L'objet jQuery possède un sélecteur de propriété que j'ai vu en fouillant dans son code hier. Ne sais pas si c'est défini dans les docs sont de façon fiable, il est (pour vérification). Mais ça fonctionne!

$('*').selector // returns *

Edit: Si vous trouvez le sélecteur à l'intérieur de l'événement, l'information devrait idéalement faire partie de l'événement lui-même et non pas l'élément, parce qu'un élément peut avoir plusieurs cliquez sur événements affectés par les différents sélecteurs. Une solution serait d'utiliser un wrapper autour de bind(), click() etc. pour ajouter des événements au lieu de les ajouter directement.

jQuery.fn.addEvent = function(type, handler) {
    this.bind(type, {'selector': this.selector}, handler);
};

Le sélecteur est passé comme une propriété de l'objet nommé selector. Accéder en tant que event.data.selector.

Nous allons l'essayer sur certains de balisage (http://jsfiddle.net/DFh7z/):

<p class='info'>some text and <a>a link</a></p>​

$('p a').addEvent('click', function(event) {
    alert(event.data.selector); // p a
});

Avertissement: n'oubliez pas que, tout comme avec live() événements, le sélecteur de propriété peut être invalide si DOM traversée de méthodes sont utilisées.

<div><a>a link</a></div>

Le code ci-dessous ne fonctionnera PAS, que live s'appuie sur le sélecteur de la propriété qui dans ce cas est - a.parent() - une défaillance de sélecteur.

$('a').parent().live(function() { alert('something'); });

Notre addEvent méthode de feu, mais vous aussi, vous allez voir le mauvais sélecteur - a.parent().

22voto

Will Points 1833

En collaboration avec @drzaus nous avons mis au point avec le plugin jQuery suivants.

jQuery.getSelector

Compressée Javascript

Utilisation et pièges

Fiddle w / tests de QUnit

http://JSFIDDLE.net/CALY5/5/

5voto

Abhilash V Points 357

Avez-vous essayé cela ?

1voto

Paul Irish Points 17507

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 gens que vous devriez juste apprendre vous-même des sélecteurs CSS, essayant de les générer avec le code n’est pas durable. :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X