2009-10-26 57 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

我覺得你標出的答案不是最好的。這是標記具有更多投票權的第二個答案的好主意。 – Mohammad 2016-10-15 16:53:53

回答

11

jQuery comments() plugin這將爲你做。用法:

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

我真的需要能夠以任何其他元素相同的方式選擇評論,但這是一個好的開始,謝謝 – 2009-10-26 09:45:31

11

如果你不想要一個插件:

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

它使用正則表達式。它設置爲搜索由<!---->包圍的任何內容,而內容上寫的內容無關緊要。

注意:但我不確定,但如果jQuery也返回評論。如果沒有,這種方法是行不通的。

+2

它確實返回的評論,所以上述作品,感謝您的建議 – 2009-10-26 10:29:27

+1

實際上再次看,這是不是真的使用jQuery來做任何有用的事情,即document.body.innerHTML == jQuery('body')。html(),並且正則表達式比這裏提供的更多...再次思考,無論如何感謝Mike – 2009-10-26 13:42:05

+1

正則表達式儘管如此,這次聚會仍然受到讚賞。 – 2rs2ts 2013-11-02 17:01:16

104

這似乎做一些等同於你正在尋找什麼:

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

+1使用本機DOM屬性。 – 2010-09-08 20:10:35

+26

這個東西並不總是工作,這一個:'((「*」)。contents()。filter(function(){return this.nodeType == 8;})' – 2011-07-18 06:05:54

+0

請參閱http://jsfiddle.net/ zM5se/1 /用於工作代碼。 – 2011-07-22 22:09:26

6

再一次,我在比賽中遲到了,但我想,因爲我發現這個職位有幫助我會回來貢獻在我最近遇到的情況。

在我們的上下文中,我們有一個廣告服務提供代碼塊來呈現廣告。

每個廣告都有唯一的「航班ID」。這意味着相同的250x300邊欄廣告可以有多個航班。所以在一次印象中,你可能會看到一個地鐵廣告,刷新,也許Quizno的。

不幸的是,該服務在評論中傳遞此航班編號,而不是像數據屬性那樣更有用。也就是說,每條評論都在一個標籤內。

從上面的,我能夠放在一起這一解決方案,以獲得在註釋航班號撬動RegExp對象的JavaScript的exec()方法:

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

再次,道歉在遊戲後期,但我認爲提供另一種解決此問題的方法並不會有什麼壞處。