10

我有一个完整的 HTML 文档,我正在使用它$.ajax(),我的.done()回调如下所示:

function (data, text_status, jq_xhr) {
  var $what_i_want = $(data).find('#what-i-want');
}

wheredata是一个字符串,其中包含完整的格式良好的 HTML 文档。此代码永远不会到达.find().

$(data),我得到:

`Uncaught Error: Syntax error, unrecognized expression: <!DOCTYPE html>`...

事实:

  • 我正在使用 jQuery 1.9.0
  • 根据 W3C 验证器,该文档是格式良好的 HTML5。

我曾经jQuery()将许多 HTML 字符串对象化,所以我很惊讶这不起作用。诚然,我不记得曾经尝试过完整的文档。鉴于错误,我猜,也许我需要以某种方式转义这个字符串。但我不确定如何。

顺便说一句,这有效

var $what_i_want = $('#what-i-want', $.parseHTML(data))

但我无法弄清楚为什么第一种方法会失败。

4

2 回答 2

15

在处理各种其他页面的情况下,我遇到了同样的问题。对我来说,他们的关键是阅读 Brian 在升级指南上的链接。问题是这一页之前有一个空行,所以即使我只是尝试插入返回的 html 的一部分,它也没有考虑返回的数据是 html。从升级指南

从 1.9 开始,只有以小于 ("<") 字符开头的字符串才被认为是 HTML。

由于它以空行而不是 < 开头,因此不被视为 html。我想我会添加这个贡献,因为我一直在试图找出问题所在。

于 2013-04-13T21:19:03.123 回答
2

DOCTYPE 不是普通的 html 标签;我认为它需要被删除。

它也可能有问题body,因为您不能将整个文档嵌入到另一个文档中。IIRC jquery 中的内部方法只是动态创建一个跨度并更新innerHTML。

于 2013-02-27T03:12:57.447 回答