jQuery()vs jQuery.parseHtml()whitespace语法错误

时间:2014-04-14 13:41:55

标签: javascript jquery

我有一行javascript导致jQuery中的语法错误:

$(document).find('.Container').replaceWith($(data).find('.Content'));

代码本身如果完全无害的话,它会从ajax调用中获取响应数据,定位一些内部内容,然后将此内容替换为容器div元素的内容。但是,当响应数据具有前导空间时,它会在jQuery中导致语法错误。

例如,以下剥离的反馈数据很好:

$("<!DOCTYPE html><html><head></head><body></body></html>")

然而,前一个空格的相同响应不是:

$(" <!DOCTYPE html><html><head></head><body></body></html>")

并提供以下错误消息:

Syntax error, unrecognized expression: <!DOCTYPE html><html><head></head><body></body></html>

我猜这可能与jQuery测试jQuery函数的参数($()是别名)的方式有关,以区分不同的重载。

我还注意到jQuery函数$.parseHTML()似乎可以处理前导空格,因为以下代码行很好:

$.parseHTML(" <!DOCTYPE html><html><head></head><body></body></html>")

有谁知道这是否是jQuery的错误?或者仅仅是jQuery()函数要求它不应该有前导空格的情况。

顺便说一下jQuery的版本是1.9.1

更新 ******************************************* *************

感谢同事的提示,我发现这是一个真正的错误(尽管jQuery团队最初并没有接受它 - read the comments)。看起来它已经/已经被修复了#39;在jQuery 1.10 / 2.0中。

2 个答案:

答案 0 :(得分:4)

来自docs

  

如果一个字符串作为参数传递给$(),jQuery会检查   字符串,以查看它是否看起来像HTML(即,它以<tag ... >开头)

所以看来jQuery在字符串的开头找不到<tag而没找到它。然后回过头来尝试将其解析为选择器,当然,这是无效的

答案 1 :(得分:2)

那是因为当你使用$('<html>')时,jquery检查字符串中的第一个和最后一个字符。

See the relevant code here.

所以当你输入一个空格作为第一个字符时,jQuery会尝试在DOM中获取一个元素,而不是解析HTML。