我有一个字符串<html><head></head><body>test</body></html>
,我试图使用jQuery获取正文的内容。
我试过
$('<html><head></head><body>test</body></html>').find('body').html();
但这不起作用。
关于如何做的任何想法?
编辑:
如果它不清楚,我需要从字符串获取body元素,而不是DOM。
编辑2:
请注意,所使用的方法不需要从head
元素返回任何内容。如内联样式。
答案 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);
答案 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
答案 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);
^ - 输出“测试”。
答案 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
标记。
答案 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标签内容之外的所有内容。