done!
2 回答
function getByClass(parent, clsName) { var arr = new Array(), clsArr = new Array(), obj = parent.getElementsByTagName('*'); for (var i = 0; i < obj.length; i++) { clsArr = obj[i].className.split(' '); for (var j = 0; j < clsArr.length; j++) if (clsArr[j] == clsName) { arr.push(obj[i]); break; } } return arr; }
可以先用 **className.split(' ') 将字符串分割成div所包含所有类构成的数组,然后遍历数组是否等于查找类名就行
然而正则匹配需要判断:匹配类在字符串首、尾和中间还有其它类名包含或者用短线组合的类名,等等多种情况
比如 匹配'ades', 有'ades ades w ades-wer ju-ades dh ades'等等,可以看出若是RegExp=/\bades\b/这种就不能匹配在字符串首尾的情况,和误匹配到ades-wer中的ades,所以总体最终的正则匹配表达式会复杂许多,
这里给一个我想好久整出来的匹配表达式,理论上最优的是 /(?<=\s|^)ades(?=\s|$)/ig 不过这里js似乎不支持逆序环视匹配“ (?<= ”和“ (?<! ”,所以不行,浏览器报错,
退而求其次, 用这个/(?:\s|^)ades(?=\s|$)/ig ,这个就是可能会匹配到类名前后的空白字符,用非获取匹配 替代 逆序环视,总算匹配出想要的结果了
附上百度百科“正则表达式”词条:http://baike.baidu.com/view/94238.htm
对了下面赠送个人仿照jQuery写的一个函数$('#myid =myname')表示查找id=myid的标签下的name=myname的所有dom对象,其中=号是仿照id和类自造的一个标志,同理有$('#id .className')等等用法。
function $() { if (arguments.length == 0) return document.getElementsByTagName('*'); else if (arguments.length == 1) var str = arguments[0]; else if (arguments.length == 2) { var parent = arguments[0]; var str = arguments[1]; if (!isDOM(parent)) return null; } else return null; var obj = parent ? parent : document; var arr1 = str.match(/^([#|\.|\=]?)([\w-]+)$/); var arr2 = str.match(/^#([\w-]+) ([#|\.|\=]?[\w-]+)$/); if (arr1) { switch (arr1[1]) { case '#': return obj.getElementById(arr1[2]); case '=': return obj.getElementsByName(arr1[2]); case '.': return getByClass(obj, arr1[2]); default: return obj.getElementsByTagName(arr1[2]); } } if (arr2) { var subObj = obj.getElementById(arr2[1]); return $(subObj, arr2[2]); } return null; } function getByClass(parent, clsName) { var arr = new Array(), clsArr = new Array(), obj = parent.getElementsByTagName('*'); for (var i = 0; i < obj.length; i++) { clsArr = obj[i].className.split(' '); for (var j = 0; j < clsArr.length; j++) if (clsArr[j] == clsName) { arr.push(obj[i]); break; } } return arr; } function isDOM(obj) { if (typeof HTMLElement === 'object') return obj instanceof HTMLElement; else return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string'; }
人懒就没写注释,凭字面意思看吧
举报
0/150
提交
取消