如何从html字符串中获取头部和身体标签作为字符串?

Posted

技术标签:

【中文标题】如何从html字符串中获取头部和身体标签作为字符串?【英文标题】:How to get head and body tags as a string from html string? 【发布时间】:2012-11-08 10:33:12 【问题描述】:

嘿,我有一个 html 字符串,我无法从中获取标签。

我尝试了很多东西,这里有一些:

var head = $("head",$(htmlString)).html();
var body = $("body",$(htmlString)).html();
var head = $("head",htmlString).html();
var body = $("body",htmlString).html();
var head = $("head",$(htmlString).html()).html();
var body = $("body",$(htmlString).html()).html();
var head = htmlString.match(/<head[^>]*>([^<]+)<\/head>/);
var body = htmlString.match(/<body[^>]*>([^<]+)<\/body>/);
var head = jQuery('<div/>').append(htmlString).find('head').html();
var body = jQuery('<div/>').append(htmlString).find('body').html();

除此之外的任何其他尝试。当我尝试将其记录到控制台时,所有这些都返回“未定义”或“”或 jquery 对象。

谁能告诉我如何将身体和头部标签作为字符串获取?

首选 jQuery/JS 而不是正则表达式

【问题讨论】:

$(htmlString).find("body");? 至少前三个对我来说就像一个魅力。那么这里的问题是什么?有任何错误信息吗?不是您期望的输出(如果是,请告诉我们htmlString)? sp00m 不工作且@Andreas 没有错误消息我尝试登录 hte htmlString 并查看“未定义”或某些对象。 htmlString 真的很长,但我不确定浏览器是否会将其解释为字符串,这是否相关? 请告诉我们字符串 (jsfiddle.net)。对于你的问题。只需使用一个简单的字符串来测试&lt;html&gt;&lt;head&gt;&lt;title&gt;foo&lt;/title&gt;&lt;body&gt;body&lt;/body&gt;&lt;/html&gt; 我将字符串添加到问题中,并在我的代码中尝试使用测试 html 和相同的结果。 【参考方案1】:

你可以这样使用javascriptslice方法:

var html = '<!DOCTYPE html>'+
'<html>'+
  '<head>' +
    '<meta name="viewport" content="width=device-width" /> '+
    '<title></title>' +
  '</head>' +
  '<body>Some Text!</body>' +
'</html>'
var bEnd, bStart;
bStart = html.indexOf("<body");
bEnd = html.indexOf("</body");
var body = html.slice(bStart, bEnd);
console.log(body);

【讨论】:

【参考方案2】:

由于您的 HTML 格式良好,您可以创建一个文档并从中选择节点:

var doc = (new DOMParser()).parseFromString(htmlstring,"text/html");
console.log(doc.head.outerHTML);
console.log(doc.body.outerHTML);

这是一个演示:http://jsfiddle.net/X3Uq2/

在 Chrome 中,你不能使用 "text/html" 内容类型,所以你必须制作一个 XML 文档并使用 getElementsByTagName

var s = new XMLSerializer();
var doc = (new DOMParser()).parseFromString(data,"text/xml");
console.log(s.serializeToString(doc.getElementsByTagName("head")[0]));
console.log(s.serializeToString(doc.getElementsByTagName("body")[0]));

http://jsfiddle.net/X3Uq2/2/

【讨论】:

我的 html 不在文档中,而是在字符串中! @eric.itzhak 已修复,添加演示 我不会总是有格式良好的 HTML,这会改变什么吗?我无法控制 htmlString 中的 HTML。 虽然定义了 htmlString,但这段代码返回“Uncaught TypeError: Cannot read property 'head' of null”! @eric.itzhak 请发布您用于实现此功能的确切代码。正如我在小提琴中所展示的那样,这种方法是有效的。【参考方案3】:

试试下面的代码:

var head = htmlString.match(/<head[^>]*>[\s\S]*<\/head>/gi);
var body = htmlString.match(/<body[^>]*>[\s\S]*<\/body>/gi);

【讨论】:

嗯,这对我有用,如果我找不到 jQuery 解决方案,我会使用它,因为我怀疑它可能会在 body 标签可能包含值等的某些情况下失败。我我错了吗?【参考方案4】:

也许这对你有帮助

var head = jQuery('<div/>').append(htmlString).find('head').html();

var body = jQuery('<div/>').append(htmlString).find('body').html();

【讨论】:

仍然登录它给出“未定义”【参考方案5】:

其实很简单:

JQuery: $(head) 原生js: document.head

如果你想得到这个标签的html:

在 JQuery 中:$(head).html(); 原生js:document.head.innerHtml

你可以在这里找到很好的 JQuery 参考:http://visualjquery.com

【讨论】:

以上是关于如何从html字符串中获取头部和身体标签作为字符串?的主要内容,如果未能解决你的问题,请参考以下文章

Python/BeautifulSoup - 如何从元素中删除所有标签?

如何从php中的字符串获取html标签?

HTNL基础标签

从 html 文档中的合格 span 标签获取类值和文本

怎样用C语言获取屏幕上指定位置处的字符的值?

将MimeMessage内容作为字符串获取