【经验】JQuery ID选择器中的不能包含特殊字符(=,@ etc.)
话说今天碰到一个怪事,以前写的流程图插件运行都是正常的,连接到外网测试数据库后怎么都运行不起来了。于是超找了半天才发现问题所在。新的数据库在返回的JSON数据中,ID加了后缀“@yjcs”(为了区别不同企业最后添加上去的)。于是JQ的ID选择器无法正常寻找解析了。
详细原因如下:
查看Jquery的源代码可以看到堆选择器的解析有这么一段:
var match = quickExpr.exec( selector ); // Verify a match, and that no context was specified for #id if ( match && (match[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( match[1] ) selector = jQuery.clean( [ match[1] ], context ); // HANDLE: $("#id") else { var elem = document.getElementById( match[3] );其中quickExpr是个正则表达式对象
quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
^#([\w-]+)$是判断ID选择符,很明显只能匹配包括下划线的任何英文字符数字和下划线中划线。
所以其他的字符如= @等都会出现问题。你解决的办法可以修改JQuery代码中的正则表达式
如我要添加=号,那么我可以改成quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-\=]+)$/,
或者避免出现=的ID出现。。随便,本文只是为了大家遇到类似问题时可以快速找到问题。。
阅读本文后,您的心情是:
恶心
愤怒
强赞
感动
路过
无聊
雷囧
关注