71 votes

Sélection des commentaires HTML avec jQuery

Quelqu'un sait-il comment sélectionner les nœuds de commentaires HTML avec jQuery ?

<html>
<head>
    <title>Check Test</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript">
        $(function() {
            $("body *").each(function() {
                alert($(this).wrap("<span />").parent().html());
            });
        });
    </script>
</head>
<body>
    <!-- Hello -->  
    <p>
        <label for="thing">Thing Label</label>
        <input id="thing" type="checkbox" />
    </p>

Cela ne reprend pas le commentaire.

0 votes

Je pense que la réponse que vous avez indiquée n'est pas la meilleure. C'est une bonne idée de marquer la deuxième réponse qui a plus de votes.

118voto

Frank Geueke Points 551

Cela semble faire quelque chose d'équivalent à ce que vous recherchez :

    $(function() {
        $("body").contents().filter(function(){
            return this.nodeType == 8;
        }).each(function(i, e){
            alert(e.nodeValue);
        });
    });

29 votes

Ce truc ne marche pas toujours, celui-là oui : $("*").contents().filter(function(){ return this.nodeType == 8;})

8 votes

@OskarAustegard - Il manquait du code pour que cela fonctionne. Corrigé : jsfiddle.net/zM5se/58

0 votes

Oui, tu as raison, je ne sais pas comment ça a pu marcher. J'ai peut-être inclus le mauvais lien - il y a 58 versions de ce seul extrait...

14voto

karim79 Points 178055

Il y a le Plugin jQuery comments() qui le fera pour vous. Utilisation :

var comments = $( "#foo" ).comments();
alert(comments.html());

0 votes

J'ai vraiment besoin de pouvoir sélectionner les commentaires de la même manière que n'importe quel autre élément, mais c'est un bon début, merci.

13voto

Mike Points 1704

Et si vous ne voulez pas de plugin :

var content = jQuery('body').html();
alert(content.match(/<!--.*?-->/g));

Cela utilise des expressions régulières. Elle est configurée pour rechercher tout ce qui est entouré de <!-- et --> alors que ce qui est écrit à l'intérieur n'a pas d'importance.

NOTE : Je ne suis pas sûr, cependant, que jQuery renvoie également des commentaires. Si ce n'est pas le cas, cette approche ne fonctionne pas.

2 votes

Il renvoie des commentaires, donc ce qui précède fonctionne, merci pour la suggestion.

2 votes

En fait, en regardant à nouveau, ce n'est pas vraiment l'utilisation de jquery pour faire quelque chose d'utile, c'est-à-dire que document.body.innerHTML == jQuery('body').html(), et il y a plus à la regex que ce qui est suggéré ici... en réfléchissant à nouveau, merci quand même Mike

1 votes

L'expression régulière a néanmoins été appréciée par cette partie.

6voto

Une fois de plus, j'interviens tardivement, mais j'ai pensé que je devais apporter ma contribution, car j'ai trouvé ce message utile dans une situation récente à laquelle j'ai été confronté.

Dans notre contexte, nous avons un service publicitaire qui fournit des blocs de code pour rendre la publicité.

Chaque annonce a un "identifiant de vol" unique. Cela signifie qu'une même publicité 250x300 sur les rails latéraux peut avoir plusieurs vols. Ainsi, en une seule impression, vous pouvez voir une publicité pour Subway, refresh et peut-être Quizno's.

Malheureusement, le service fournit cet identifiant de vol dans un commentaire, et non pas sous une forme un peu plus utile comme un attribut de données. Cela dit, chaque commentaire se trouve dans une balise.

À partir de ce qui précède, j'ai pu mettre au point cette solution pour obtenir le numéro de vol dans le commentaire en utilisant la méthode exec() de l'objet RegExp de JavaScript :

regexComment = new RegExp(/<!--\s*ad flight id:\s*([0-9]+)\s*-->/i);
targetElement = regexComment.exec($('div.advertisement').html());
if(targetElement.length > 0) {
    return parseInt(targetElement[1]);
}

Encore une fois, je m'excuse d'intervenir tardivement, mais j'ai pensé que cela ne ferait pas de mal de proposer une autre approche de cette question.

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