JQuery ID选择器中的不能包含特殊字符(=,@ etc.)

最近在开发一个界面时发现了某些特殊情况下ID选择器就会出现无效的情况,经查原来是的动态生成的Dom 元素的ID中包含“=”导致(你可能会问为什么会在ID中有“=”号,我只能说这种情况虽然不多,但是有,比如我的情况,我的ID是某个字符串Base64编码之后的字符串)。

JQuery中的1.2.6版本至1.3.2版本都有这种情况,下面是测试的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title></title>
    <script src="Javascript/jquery.1.3.2.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function() {
            var div = $("#hellodiv=");
            if (div.length > 0) {
                alert("获取到了Div");
            }
            else {
                alert("哎呀ID中不能包含=");
            }
            var div2 = document.getElementById("hellodiv=");
            if (div2) {
                alert("我可以获取到哦");
            }
            else {
                alert("哎呀我也获取不到");
            }
        });
    </script>
</head>
<body>
    <div id="hellodiv="></div>
</body>
</html>

查看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出现。。随便,本文只是为了大家遇到类似问题时可以快速找到问题。。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索正则表达式
, context
, alert
, 选择
, 下划线
, match
, jquery获取版本号
, 字符串ID
jquery包含字符串
jquery 选择器 不包含、jquery 选择器 包含、jquery 选择器 id包含、jquery选择器特殊字符、css 包含选择器,以便于您获取更多的相关知识。

时间: 2016-01-30

JQuery ID选择器中的不能包含特殊字符(=,@ etc.)的相关文章

jQuery的选择器中的通配符使用介绍

 这篇文章主要介绍了jQuery的选择器中的通配符,需要的朋友可以参考下 1.选择器  (1)通配符:  代码如下: $("input[id^='code']");//id属性以code开始的所有input标签  $("input[id$='code']");//id属性以code结束的所有input标签  $("input[id*='code']");//id属性包含code的所有input标签    (2)根据索引选择  代码如下: $(&q

jQuery的选择器中的通配符[id^=&#039;code&#039;]或[name^=&#039;code&#039;]及jquery选择器总结_jquery

这两天在做一个专题的时候遇到了一个通配符的问题 //弹层操作 $(function(){ //视频播放 $("a[href^='#video']").each(function(index, element) { $(this).click(function(){ $(".popDiv,#videoBox1").show(); }); }); //图片 $(".imgs a:not([href^='#video'])").each(functio

java代码中校验是否包含特殊字符遇到的问题!!!!急!!

问题描述 Stringstr="abc我d";System.out.println(str.matches("[^@#$%&(){}<>]{0,}")+"==============");这段代码,到jdk1.5或者1.6的环境中返回的是true,但是到jdk.1.4环境一直是返回false,不知道为什么在jdk1.4环境中会把中文字符当做特殊字符,很是不解,麻烦大家帮小弟分析下这是什么问题?改怎么解决?谢谢了! 解决方案 解

jQuery的选择器中的通配符使用介绍_jquery

1.选择器 (1)通配符: 复制代码 代码如下: $("input[id^='code']");//id属性以code开始的所有input标签 $("input[id$='code']");//id属性以code结束的所有input标签 $("input[id*='code']");//id属性包含code的所有input标签 (2)根据索引选择 复制代码 代码如下: $("tbody tr:even"); //选择索引为偶数

Jquery选择器中使用变量实现动态选择例子_jquery

例子一: <table> <tr> <th>用户名</th> <th>状态</th> <tr> <tr> <td>张三</td> <td data-uid="10000">正常</td> <tr> <tr> <td>李四</td> <td data-uid="10001"

jQuery选择器中含有空格和特殊符号的注意事项

文章简介:使用jQuery选择器应注意的问题. 一.选择器中含有特殊符号的注意事项 1.选择器中含有"."."#"."("或"]"等特殊字符根据W3C的规定,属性值中是不能含有这些特殊字符的,但在实际项目中偶尔会遇到表达式中含有"#"和"."等特殊字符,如果按照普通的方式去处理出来的话就会出错.解决此类错误的方法是使用转义符转义. <div id="id#b"&

jquery获取css中的选择器(实例讲解)_jquery

开始写之前先复习一下元素和节点的区别: 元素是W3C文档对象模型(DOM)当中使用最广泛的节点之一. 元素拥有关联的"属性". XmlElement类拥有许多方法来访问它的"属性"(GetAttribute, SetAttribute, RemoveAttribute, GetAttributeNode, 等等). 你也可以使用"Attributes"属性来返回一个支持"名字"或者"序号"访问的"

使用jQuery在对象中缓存选择器的简单方法

  这篇文章主要介绍了使用jQuery在对象中缓存选择器的简单方法,jQuery是最知名的JavaScript库,需要的朋友可以参考下 当使用像jQuery这样的库时,开发者通常会使用选择器来访问和操作DOM中的元素.当一个选择在页面上被反复的访问时,把它缓存起来以获得更好的性能是个不错的想法. 让我们看一个例子, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 jQuery(document).ready(function() { jQuery('

使用jQuery在对象中缓存选择器的简单方法_jquery

 当使用像jQuery这样的库时,开发者通常会使用选择器来访问和操作DOM中的元素.当一个选择在页面上被反复的访问时,把它缓存起来以获得更好的性能是个不错的想法. 让我们看一个例子,   jQuery(document).ready(function() { jQuery('#some-selector').on('hover', function() { jQuery(this).fadeOut('slow').delay(400).fadeIn(); console.log(jQuery(t