我有一行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中。
答案 0 :(得分:4)
来自docs:
如果一个字符串作为参数传递给$(),jQuery会检查 字符串,以查看它是否看起来像HTML(即,它以
<tag ... >
开头)
所以看来jQuery在字符串的开头找不到<tag
而没找到它。然后回过头来尝试将其解析为选择器,当然,这是无效的
答案 1 :(得分:2)
那是因为当你使用$('<html>')
时,jquery检查字符串中的第一个和最后一个字符。
所以当你输入一个空格作为第一个字符时,jQuery会尝试在DOM中获取一个元素,而不是解析HTML。