Выбор HTML-комментариев с помощью jQuery

Кто-нибудь знает, как выбрать ноды 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 ответа

Решение

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

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

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

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

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

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

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

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

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

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

Каждое объявление имеет уникальный идентификатор рейса. То есть одно и то же объявление боковой железной дороги 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]);
}

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

Другие вопросы по тегам