jQuery从字符串中选择body元素

时间:2011-04-06 23:35:17

标签: jquery

我有一个字符串<html><head></head><body>test</body></html>,我试图使用jQuery获取正文的内容。

我试过

$('<html><head></head><body>test</body></html>').find('body').html();

但这不起作用。

关于如何做的任何想法?

编辑:

如果它不清楚,我需要从字符串获取body元素,而不是DOM。

编辑2:

请注意,所使用的方法不需要从head元素返回任何内容。如内联样式。

9 个答案:

答案 0 :(得分:8)

var x = '<html><head></head><body>test</body></html>';
x = x.split("<body")[1].split(">").slice(1).join(">").split("</body>")[0];
alert(x);

检查http://jsfiddle.net/6hPHn/1/

处的工作示例

答案 1 :(得分:2)

似乎不喜欢将这种HTML传递到jQuery函数中,可能是因为html是HTML文档的父元素。

它甚至无法使用原生DOM API ......

var a = document.createElement('div');
a.innerHTML = '<html><head></head><body>test</body></html>';
console.log(a.innerHTML); // test

jsFiddle您的字符串与其他字符串之间存在差异。

您可以使用正则表达式...

var str = '<html><head></head><body class="here is some classes">test\ntesty</body></html>';
str = str.replace(/^.*?<body.*?>([\s\S]*?)<\/body>.*?$/, '$1');
console.log(str); // test

jsFiddle

答案 2 :(得分:2)

我同意@ RustyTheBoyRobot的回答,使用RegEx会效果最好。它比使用jQuery创建所有这些DOM元素要快得多。尝试这样的事情:

var html_page_string = '<html><head></head><body>test</body></html>';
var matches = html_page_string.match(/<body>(.*)<\/body>/ig);

您想要的文字应该在matches[1]

修改

出于某种原因,删除g标志似乎使其正确分组,以便字符串位于matches[1]中:

var matches = html_page_string.match(/<body>(.*?)<\/body>/i);

答案 3 :(得分:1)

假设您的HTML字符串是有效的严格XML并且您使用的是jQuery 1.5,则可以使用$ .parseXML函数。

$($.parseXML('<html><head></head><body><div>test</div></body></html>'))
.find("body").contents()

答案 4 :(得分:0)

我会使用.contents()方法。

HTML:

<html>
    <head><title>Test</title></head>
    <body>Test</body>
</html>

JS:

var s = contents('body');
document.write(s);

^ - 输出“测试”。

See it working here.

答案 5 :(得分:0)

从未尝试使用<body>

我通常加载一个#ID元素,就像

一样
$('#where').load('file/path.php?bla?ble=bli #ID');

如果这没有帮助,抱歉,我没有明白你的意思..

顺便说一句,如果出现以下情况,你的exaple就会起作用:

<html><head></head><body><div id="ID">test</div></body></html>

如果它有帮助..

答案 6 :(得分:0)

jQuery抛出<html>/<head>/<body>标签。如果您有任何嵌套元素,那么将对其进行解析:

$('<html><head></head><body><div>test</div></body></html>').find('body').html();

会给你“测试”,因为在解析之后,你有一个div元素。调用.html()会返回div中的html。

然后快速破解身体:

var tmp = $('<div></div>').append('<html><head></head><body>test</body></html>');

console.log(tmp.html());

修改

阅读有关头元素的更新后...如果你想要一个hack,只需正则表达body。在你攻击之前,我知道,正则表达式并不是要解析html,但在这种情况下,我们假设应该只有一组body标签,那些标签应该相当简单。

基本上,我使用<body> <div id="hack"> and everything from`将所有内容替换为to the end of the string with标记。

实施例: http://jsfiddle.net/m79tv/

答案 7 :(得分:0)

我有同样的问题。我的解决方案是在我的字符串中替换所有('body&gt;','xbody&gt;')然后我可以使用$(mystring).find('xbody')

希望这有帮助。

答案 8 :(得分:-2)

我的猜测是,你想要完成的东西最容易用正则表达式。

var html = $("#htmlInput").val();  //Grab what's in your textbox
html = html.replace(/.*<body[ A-Za-z0-9\="'\(\);]*>/i, "");
html = html.replace(/<\/body>.*/i, "");

除非body标签中有属性,否则此正则表达式应该能够删除除body标签内容之外的所有内容。