如何从HTML字符串的`head`部分提取元素?

时间:2014-01-22 16:37:05

标签: javascript jquery html

我有一个变量(s),它包含整个HTML文档(作为字符串)。我想从head部分中提取一些元素。使用body这不是问题,我将整个数据打包到jQuery变量中并调用find

但是head部分是不同的故事。当我将它打包到jQuery对象时,我可以看到它为它创建了一个数组,我看到了我想要提取的元素(所以到目前为止它按照我的意愿工作)。但是当我对它运行find时,jQuery会完全忽略head及其内容。

那么如何从head

中提取元素

仅供记录,目前我正在尝试提取link个节点以获取CSS文件的网址。

3 个答案:

答案 0 :(得分: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]);
}

答案 1 :(得分: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);  
});

这会从字符串中提醒三个链接。

答案 2 :(得分:0)

你可以只查询jQuery对象......

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