成长脚印-专注于互联网发展
【经验】JQuery ID选择器中的不能包含特殊字符(=,@ etc.)
post by:天之骄子 2012-12-7 13:14

话说今天碰到一个怪事,以前写的流程图插件运行都是正常的,连接到外网测试数据库后怎么都运行不起来了。于是超找了半天才发现问题所在。新的数据库在返回的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出现。。随便,本文只是为了大家遇到类似问题时可以快速找到问题。。

 

 

 

评论:
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容