2009-10-26 9 views
58

jQueryでHTMLコメントノードを選択する方法を知っていますか?jQueryでHTMLコメントを選択

<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> 

これは、コメントをピックアップしていません。

+0

私はあなたがマークした答えが最良ではないと思います。これは、より多くの投票権を持つ2番目の回答をマークする良い考えです。 – Mohammad

答えて

11

jQuery comments() pluginがあります。使用法:

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

私は本当に他の要素と同じ方法でコメントを選択できるようにする必要がありますが、それは良いスタートだよ、ありがとう –

11

そして、あなたはプラグインを必要としない場合:

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

これは正規表現を使用しています。 <!---->で囲まれたものを検索するように設定されていますが、内側に書かれているものは問題ありません。

注:jQueryもコメントを返すかどうかはわかりません。そうでない場合、この方法は機能しません。

+2

それはコメントを返すので、上記の作品は、提案のおかげで –

+1

実際に再び見て、これは本当にjqueryを使って何も役に立たない、つまりdocument.body.innerHTML == jQuery( 'body').html()、ここに示唆されたものよりも正規表現に...ありがとうと思う、とにかくマイク –

+1

正規表現それにもかかわらず、このパーティーによって評価されました。 – 2rs2ts

104

これは、あなたが探しているものと同等の何かをするようだ:

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

ネイティブDOMプロパティを使用する場合は+1してください。 –

+26

これはいつも動かないものです: '$(" * *)。contents()。filter(function(){return this.nodeType == 8;}) ' –

+0

http://jsfiddle.net/を参照してください。 zM5se/1 /作業コード用。 –

6

もう一度、私はゲーム後半でんだけど、私はこの記事が役に立ったと評価していて、私は戻って貢献しようと思いました最近の状況で私は直面した。

ここでは、広告をレンダリングするコードブロックを提供する広告サービスを提供しています。

各広告には固有の「飛行ID」があります。同じ250x300のサイドレール広告が複数のフライトを持つことができることを意味します。だから1つの印象では、地下鉄、リフレッシュ、おそらくQuiznoの広告を見るかもしれない。

残念ながら、サービスはこのフライトIDをコメントで配信しますが、データ属性のようにもう少し役立つものではありません。つまり、各コメントはタグ内にあります。 、ゲーム内の後半のための謝罪再び

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

:上記から

、私には、JavaScriptの幹部を活用したコメントでフライト番号()RegExpオブジェクトのメソッドを取得するために一緒にこのソリューションを置くことができましたしかし、私は、この問題に対するもう一つのアプローチを提供することが害ではないと思った。