偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

JQuery ID選擇器中的不能包含特殊字符的處理

開發(fā) 前端
最近在開發(fā)一個界面時發(fā)現(xiàn)了某些特殊情況下ID選擇器就會出現(xiàn)無效的情況,查明是ID選擇器中的不能包含特殊字符的原因。本文將介紹解決方法。

問題的起因是動態(tài)生成的Dom 元素的ID中包含“=”導致(你可能會問為什么會在ID中有“=”號,我只能說這種情況雖然不多,但是有,比如我的情況,我的ID是某個字符串Base64編碼之后的字符串)。

JQuery中的1.2.6版本至1.3.2版本都有這種情況,下面是測試的代碼:

view plaincopy to clipboardprint?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<html xmlns="<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> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<html xmlns="<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的源代碼可以看到堆選擇器的解析有這么一段:

view plaincopy to clipboardprint?
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] ); 

    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選擇符,很明顯只能匹配包括下劃線的任何英文字符數(shù)字和下劃線中劃線。

所以其他的字符如= @等都會出現(xiàn)問題。你解決的辦法可以修改JQuery代碼中的正則表達式

如我要添加=號,那么我可以改成quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-\=]+)$/,

或者避免出現(xiàn)=的ID出現(xiàn)。。隨便,本文只是為了大家遇到類似問題時可以快速找到問題。

【編輯推薦】

  1. 使用jQuery和PHP構建一個受Ajax驅動的Web頁面
  2. 使用 jQuery 簡化 Ajax 開發(fā)
  3. 跟ASP.NET MVC一起使用jQuery
責任編輯:彭凡 來源: 博客園
相關推薦

2012-06-12 09:43:11

jQuery

2025-06-30 02:11:00

2010-09-07 12:56:49

id選擇器CSS

2010-12-27 16:01:45

jQuery選擇器

2010-07-20 10:11:32

jQuery選擇器Sizzle

2010-09-26 16:51:03

SQL Server查

2013-03-11 10:30:56

CSSWeb

2009-07-16 11:02:33

Swing文件選擇器

2010-06-25 09:04:43

jQuery選擇器

2010-09-03 09:30:29

CSS選擇器

2013-12-02 14:22:14

jQuery選擇器

2010-09-06 09:50:34

id選擇器CSS

2010-08-26 12:53:40

CSSid選擇器

2011-04-26 15:07:48

jQuery

2009-11-26 09:52:05

jQuery選擇器

2015-07-13 11:28:22

Linux文件名

2023-01-30 08:42:33

CSS選擇器性能

2012-04-16 14:32:31

iOS選擇器代碼

2010-09-07 10:19:31

SQL語句

2025-02-28 09:14:09

JavaNIO機制
點贊
收藏

51CTO技術棧公眾號