Выбор комментариев HTML с помощью jQuery - PullRequest
64 голосов
/ 26 октября 2009

Кто-нибудь знает, как выбирать узлы комментариев HTML с помощью 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>

Это не берет комментарий.

Ответы [ 4 ]

114 голосов
/ 08 сентября 2010

Это похоже на то, что вы ищете:

    $(function() {
        $("body").contents().filter(function(){
            return this.nodeType == 8;
        }).each(function(i, e){
            alert(e.nodeValue);
        });
    });
12 голосов
/ 26 октября 2009

А если вы не хотите плагин:

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

Используются регулярные выражения. Он настроен на поиск всего, что заключено в <!-- и -->, хотя не имеет значения, что написано внутри.

ПРИМЕЧАНИЕ: Я не уверен, однако, если jQuery также возвращает комментарии. Если это не так, этот подход не работает.

12 голосов
/ 26 октября 2009

Есть плагин jQuery comments () , который сделает это за вас. Использование:

var comments = $( "#foo" ).comments();
alert(comments.html());
6 голосов
/ 08 июня 2012

Еще раз, я опаздываю в игре, но я решил внести свой вклад, поскольку нашел этот пост полезным в недавней ситуации, с которой я столкнулся.

В нашем контексте у нас есть рекламный сервис, предоставляющий блоки кода для показа рекламы.

Каждое объявление имеет уникальный идентификатор рейса. Это означает, что одно и то же объявление боковой железной дороги 250x300 может иметь несколько рейсов. Таким образом, вы можете увидеть рекламу Subway, обновления и, возможно, Quizno.

К сожалению, сервис предоставляет этот идентификатор рейса в комментарии, а не как нечто более полезное, например, атрибут данных. Тем не менее, каждый комментарий находится внутри тега.

Исходя из вышеизложенного, я смог собрать это решение, чтобы получить номер рейса в комментарии, используя метод exec () JavaScript объекта RegExp:

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]);
}

Опять же, извиняюсь за позднюю игру, но я подумал, что не помешает предложить еще один подход к этой проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...