Выбор 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]);
}
Опять же, извиняюсь за опоздание в игре, но я подумал, что не помешает предложить еще один подход к этому вопросу.