2014-01-22 44 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的方式,我提出了一个新的答案。 –