2014-01-22 46 views
1

我有一個變量(s),它保存整個HTML文檔(作爲一個字符串)。我想從其head部分中提取一些元素。使用body這不是問題,我將整個數據打包到jQuery變量中,並調用find如何從HTML字符串的「head」部分提取元素?

但與head節是不同的故事。當我將它打包到jQuery對象時,我可以看到它爲它創建了一個數組,並且我看到了我想要提取的元素(所以到目前爲止它按照我的意願工作)。但是當我運行find時,jQuery完全忽略了head及其內容。

那麼如何從head中提取元素?

只是爲了記錄,目前我試圖提取link節點來獲取CSS文件的URL。

+0

爲什麼你不能只是'$(「link」);'? – Prisoner

+0

@Prisoner,你是指使用'find'方法嗎?因爲它不是當前文件。 – greenoldman

回答

1

對於頂級元素在你的DOM中,似乎你必須使用filter()而不是find()。

var html = $.parseHTML('<html><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><link rel="stylesheet" href="/css/inuit.css"><link rel="stylesheet" href="/css/inuit.css"><link rel="stylesheet" href="/css/inuit.css"></head><body></body></html>'); 

$(html).filter("link").each(function(i, link) { 
    alert(link); 
}); 

這會警告字符串中的三個鏈接。

0

您可以直接查詢jQuery對象吧......

var sHtmlString = ....; 
var oDom = $(sHtmlString); 
oDom.find("head > link"); 
+0

謝謝,我檢查過它,但「body」外面沒有任何工作。我甚至不能在'body'中使用'find',唯一有效的元素是'body'中的節點(至少看起來像這樣)。 – greenoldman

+0

你說得對,它適用於DOM,但不適用於解析的字符串:S Vanilla文檔片段似乎也具有相同的限制。 – michael

1

對於你的CSS文件的URL,這個正則表達式應該做的伎倆:

var patt = /.*<link(.*href="(.*)"|.*rel="stylesheet"|.*type="text\/css"){1,}.*>.*/gi; 
var array_of_ccs_files = head_as_str.match(patt); 
for (var i = 1; i < array_of_ccs_files.length; ++i) { 
    console.log(array_of_ccs_files[i]); 
} 
+0

謝謝。這一個工程,但我會稍微長一點,也許有人會想出定期的DOM方法。 – greenoldman

+0

找到另一種適用於DOM的方式,我提出了一個新的答案。 –