jQuery的语法错误,无法识别的表达式:(Jquery Syntax error, unrecog

2019-07-21 08:22发布

为什么会出现这个错误,我如何可以测试它,所以它不会打破,我想检查空,但显然是不会工作,谢谢。

请不要建议,不写ID喜欢这个,因为我知道它的错,但它是一个可能性。

var jsonTest = [
  {
    "myId": "''''''\"\"\"\"'''''''''''''\"#####$'''''",
  }
];

alert(jsonTest[0].myId); 
// Works - alerts the myId

$('#' + jsonTest[0].myId ).length; 
// Error: Syntax error, unrecognized expression:
// #''''''""""'''''''''''''"#####$'''''

Answer 1:

jQuery的使用这个代码来检测一个基于ID选择:

characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+"
...
"ID": new RegExp( "^#(" + characterEncoding + ")" ),

对于此正则表达式失败"''''''\"\"\"\"'''''''''''''\"#####$'''''"或者更简单地进行"'"

查询引擎是有限的,这是不是一个非常简练的语言非常令人惊讶和id有效性规则,以便松懈。 它无法处理任何有效证件。

如果你真的需要能够处理任何类型的有效身份证件的,可使用

$(document.getElementById(jsonTest[0].myId))

事实上,你不应该使用$('#'+id) ,因为它只是增加了一个无用的(并且有点危险)解析进行同样的操作层。



Answer 2:

如果我理解你的问题,你有一个包含特殊字符的ID。 你基本上需要逃避他们 ,以便他们为文字字符,而不是查询选择处理:

使用任何元字符(如“#$%&'()* +,/ :; <=> @ [] ^`!?{|}〜)作为名称的文本部分,它必须转义与两个反斜杠:\例如,ID =“foo.bar”元件时,可以使用选择器$(“#FOO \的.bar”)。

......在这种情况下,你还需要为字符串分隔符额外的转义级别, "这太疯狂了,但这个工程:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript"><!--
jQuery(function($){
    console.log( $("#" + "\\'\\'\\'\\'\\'\\'\\\"\\\"\\\"\\\"\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\\"\\#\\#\\#\\#\\#\\$\\'\\'\\'\\'\\'").length );
});
//--></script>
</head>
<body>

<div id="''''''&quot;&quot;&quot;&quot;'''''''''''''&quot;#####$'''''">Foo</div>

</body>
</html>

编辑:当然,dystroy的回答-omit jQuery的选择引擎,并且使用getElementByID() -是方式更实用。 jQuery的手动链接一个有趣的博客条目 ,涵盖这和其他相关技术:

的document.getElementById()和像document.getElementsByClassName类似的功能()可以只使用转义属性值,它是在HTML中使用的方式。 当然,你必须转义任何引号,这样你仍然结束了一个有效的JavaScript字符串。



Answer 3:

W3C定义了一个新的函数,这: CSS.escape() 在您的示例代码,它应该是这样的:

var jsonTest = [
  {
    "myId": "''''''\"\"\"\"'''''''''''''\"#####$'''''",
  }
];

$('#' + CSS.escape(jsonTest[0].myId)).length; // Works 

浏览器还不支持它,但是有一个填充工具库,你可以在此期间使用: https://github.com/mathiasbynens/CSS.escape

我已经在我的项目成功使用过它。



文章来源: Jquery Syntax error, unrecognized expression: