一个很好的正则子表达式的例子。
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; } |
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说方法的参数最好不要超过4个?
· C#.Net 筑基-优雅 LINQ 的查询艺术
· 一个自认为理想主义者的程序员,写了5年公众号、博客的初衷
· 大数据高并发核心场景实战,数据持久化之冷热分离
· 运维排查 | SaltStack 远程命令执行中文乱码问题
· C#.Net筑基-优雅LINQ的查询艺术
· 博客园众包平台:诚征3D影像景深延拓实时处理方案(预算8-15万)
· Cursor生成UI,加一步封神
· 为什么说方法的参数最好不要超过4个?
· [原创]《C#高级GDI+实战:从零开发一个流程图》第04章:来个圆形,连线它!