2013-02-04 113 views
3

我正在開發一個chrome擴展,它從頁面讀取html註釋並在一個操作彈出窗口中呈現它們。<html><html>標記

但是,我不知道如何(如果有可能)獲取<html>標籤之前和之後的一些評論。例如:

<!-- test test test --> 
<DOCTYPE html> 
<html> 
... 
</html> 

在jQuery中,$("html").before()$("html").after()都返回相同$("html")

是否有可能使用jQuery或純Javascript獲取這些類型的註釋?

編輯:有評論的頁面看起來是這樣的:

<!-- Comment I'd like to fetch --> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us" > 
<head> 
<title>Featured Designers for WOMEN</title> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
<meta http-equiv="Content-Script-Type" content="text/javascript" /> 
<meta http-equiv="Content-Style-Type" content="text/css" /> 
+0

我認爲HTML註釋不會附加到DOM樹上。 –

+1

'jQuery.before()'和'jQuery.after()'*插入*內容:) – jensgram

+0

確實如此,@jensgram!我的壞=) – fegemo

回答

4

有了這個文件:

<!-- comment 1 --> 
<!DOCTYPE html> 
<!-- comment 2 --> 
<html> 
<body> 
hello world 
</body> 
</html> 

你得到這樣的第一個註釋:

document.firstChild.nodeValue 

第二點意見是發現這樣的:

document.childNodes[2].nodeValue 

要下獲得所有評論document

var nodes = document.childNodes; 
for (var i = 0, len = nodes.length; i !== len; ++i) { 
    if (nodes[i].nodeType === 8) { 
     console.log('Found comment' + nodes[i].nodeValue); 
    } 
} 
+0

的實際代碼更新了問題嘿@Jack,爲了得到第二個評論,它可能有效。但是document.firstChild.nodeValue返回null(至少在chrome上)。 – fegemo

+0

@fegemo我在Chrome上測試過它;但我的答案的最後部分應該工作。 –

+0

最後一種方法也不起作用:http://jsfiddle.net/zKk3j/1/ – fegemo

0

document.firstChild應該這樣做。

+0

'document.firstChild'正在返回DOCTYPE標記 – fegemo

0

$("html").siblings();這將返回所有與我相信html標籤相同級別的dom對象元素。我想通過使用JSfiddle進行確認,但是我現在正在使用IE8在他們的網站上收到Javascript錯誤。如果在您的測試中無法爲您工作,我可以稍後再確認。

+0

'$(「html」)。siblings()'返回一個空數組 – fegemo

+0

html是什麼樣的? – Jarealist

+0

我用頁面 – fegemo