Выбор 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>

Это не отвечает за комментарий.

Ответ 1

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

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

Ответ 2

Кажется, что-то похоже на то, что вы ищете:

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

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

Из вышеизложенного я смог собрать это решение, чтобы получить номер рейса в комментарии, используя метод JavaScript exec() объекта 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]);
}

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