Goodsu

导航

< 2025年6月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5
6 7 8 9 10 11 12
统计
 

一个很好的正则子表达式的例子。

1
var reg = /^(#)?(\.)?(\w+)$/img;//包含了3个子表达式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
var query = function(selector) {
       var reg = /^(#)?(\.)?(\w+)$/img;
       var regResult = reg.exec(selector);
       var result = [];
       //如果是id选择器
       if(regResult[1]) {
           if(regResult[3]) {
               if(typeof document.querySelector === "function") {
                   result.push(document.querySelector("#"+regResult[3]));
               }
               else {
                   result.push(document.getElementById(regResult[3]));
               }
           }
       }
       //如果是class选择器
       else if(regResult[2]) {
           if(regResult[3]) {
               if(typeof document.getElementsByClassName === 'function') {
                   var doms = document.getElementsByClassName(regResult[3]);
                   if(doms) {
                       result = converToArray(doms);
                   }
               }
               //如果不支持getElementsByClassName函数
               else {
                   var allDoms = document.getElementsByTagName("*") ;
                   for(var i = 0, len = allDoms.length; i < len; i++) {
                       if(allDoms[i].className.search(new RegExp(regResult[2])) > -1) {
                           result.push(allDoms[i]);
                       }
                   }
               }
           }
       }
       //如果是标签选择器
       else if(regResult[3]) {
           var doms = document.getElementsByTagName(regResult[3].toLowerCase());
           if(doms) {
               result = converToArray(doms);
           }
       }
       return result;
   };
 
   function converToArray(nodes){
       var array = null;
       try{
           array = Array.prototype.slice.call(nodes,0);//针对非IE浏览器
       }catch(ex){
           array = new Array();
           for( var i = 0 ,len = nodes.length; i < len ; i++ ) {
               array.push(nodes[i])
           }
       }
       return array;
   }

 

posted on 2015-09-08 22:17  Goodsu  阅读(4817)  评论(0)    收藏  举报
编辑推荐:
· 为什么说方法的参数最好不要超过4个?
· C#.Net 筑基-优雅 LINQ 的查询艺术
· 一个自认为理想主义者的程序员,写了5年公众号、博客的初衷
· 大数据高并发核心场景实战,数据持久化之冷热分离
· 运维排查 | SaltStack 远程命令执行中文乱码问题
阅读排行:
· C#.Net筑基-优雅LINQ的查询艺术
· 博客园众包平台:诚征3D影像景深延拓实时处理方案(预算8-15万)
· Cursor生成UI,加一步封神
· 为什么说方法的参数最好不要超过4个?
· [原创]《C#高级GDI+实战:从零开发一个流程图》第04章:来个圆形,连线它!
 
点击右上角即可分享
微信分享提示