前言:我们在使用js使用DOM选中元素时一般都是document.getElementsByClassName(),那具体此方法是如何实现的呢?
思路
在整个页面中选取某个className,需要拿到整个DOM树。可以这样实现。
1
var allDomArray = document.getElementsByTagName("*");
因为拿到的类名不是规整的,有时候我们需要处理一下空格字符串。我们把处理该方法的操作封装在函数上
1
2
3
4
5function trimSpace(strClass) {
var reg = /\s+/g;
var newstrClass = strClass.replace(reg, ' ').trim();//封装好的方法,去除首尾空格
return newstrClass;
}在处理完类名的格式后,我们大概就能选中DOM结构。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Element.prototype.getElementsByClassName = Element.prototype.getElementsByClassName = function (_className) {
var allDomArray = document.getElementsByTagName("*");
var lastDomArray = [];
for (var i = 0; i < allDomArray.length; i++) {
var lastClassName = trimSpace(allDomArray[i].className).trim();
var classArray = lastClassName.split(' ');
for (var j = 0; j < lastClassName.length; j++) {
if (classArray[j] == _className) {
lastDomArray = lastDomArray.push(classArray[i]);
break;
}
}
}
return lastDomArray;
}
}
function trimSpace(strClass) {
var reg = /\s+/g;
var newstrClass = strClass.replace(reg, ' ');//封装好的方法,去除首尾空格
return newstrClass;
}
效果如下图
完整代码
1 | document.getElementsByClassName = undefined; |