jQuery .find(“body”)。html()== null

时间:2011-09-30 09:02:54

标签: javascript jquery html

我有一个名为test.html的html页面,这是它的内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>
    <title></title> </head> <body style="margin: 0; padding: 0; background: #d9d9d9;">
    <form name="form1" method="post" action="NewsLetterPreview.aspx?NewsletterID=1" id="form1">
    <div>
        <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTA3NzM3OTc4N2Rkkk3StA9iwyEdCoR43JPpw6OyRHubNTnbXatTbxCXsVA=" />
    </div>
    </form> </body> </html>

然后我有另一个页面,我使用$ .get来获取页面的内容:

$.get("test.html", function (data) {
            alert($(data).find("body").html());
        });

但是alert($(data).find("body").html())返回null。对alert($(data).find("form").html())也是如此。仅当我指定alert($(data).find("div").html())时才会返回输入字段。

如何选择正文/表格?

2 个答案:

答案 0 :(得分:2)

如果你想用获取的HTML替换你的身体,这应该这样做。

$.get("test.html", function (data) {
            $(body).html(data);
        });

修改

误读了你的问题。

建议你改用json或.replace()。

示例:alert(data.replace(/^.*?\<body\>(.*?)\<\/body\>.*$/, "$1"));

如果您想要包含身体标签:alert(data.replace(/^.*?(\<body\>.*?\<\/body\>).*$/, "$1"));

我不认为jquery可以按照你希望的方式使用HTML。将其包含在代码中,然后使用常规函数或找到另一种解决方法。

答案 1 :(得分:0)

我不确定解决方案,但我想我可以对这个问题有所了解......

从这里开始:http://api.jquery.com/jQuery/

  

传递复杂的HTML时,某些浏览器可能无法生成DOM   它完全复制了提供的HTML源代码。如上所述,我们使用   浏览器的.innerHTML属性,用于解析传递的HTML和插入   它进入当前的文件。在此过程中,某些浏览器   过滤掉某些元素,如,或   元素。结果,插入的元素可能不具有代表性   传递的原始字符串。

这意味着在某些浏览器上输入的HTML字符串在jQuery处理字符串之前删除了form,head和body标签 - 所以就好像你返回的字符串只有div一样这是它的内容。