function $(selector) {
var allchilds = [];
var childs = function (element) {
return element.getElementsByTagName('*');
}
var ele = document.getElementsByTagName('html')[0];
var sele = selector.replace(/\s+/, ' ').split(' '); //为什么要空格去替换空格呢?
for (var i = 0, len = sele.length; i < len; i++) {
ele = childs(ele);
var eleLen = ele.length;
var isGet = false;//这行代码的意义?
switch (sele[i][0]) {
case '#':
for (var j = 0; j < eleLen; j++) {
if (ele[j].id === sele[i].substring(1)) {
ele = ele[j];
isGet = true;
break;
}
}
break;
case '.':
for (var j = 0; j < eleLen; j++) {
var name = uniqArray(ele[j].className.split(' '));
if (name.indexOf(sele[i].substring(1)) !== -1) { //括号中内容的意思??
ele = ele[j];
isGet = true;
break;
}
}
break;
case '[':
var valueLoc = sele[i].indexOf('=');
if (valueLoc !== -1) {
var key = sele[i].substring(1, valueLoc);
var value = sele[i].substring(valueLoc + 1, sele[i].length - 1);
for (var j = 0; j < eleLen; j++) {
if (ele[j][key] === value) {
ele = ele[j];
isGet = true;
break;
}
}
}
else {
var key = sele[i].substring(1, sele[i].length - 1);
for (var j = 0; j < eleLen; j++) {
if (ele[j][key]) {
ele = ele[j];
isGet = true;
break;
}
}
}
break;
default :
for (var j = 0; j < eleLen; j++) {
if (ele[j].tagName === sele[i].toUpperCase()) {
ele = ele[j];
isGet = true;
break;
}
}
break;
}
}
if (!isGet) {
ele = null;
}
return ele;
}
万分感谢
var sele = selector.replace(/s+/, ' ').split(' '); //为什么要空格去替换空格呢?
这个是这则,s代表空字符不一定是空格,r n,t这种都算,或者传递多个空格统一替换为1个空格,防止split分割后得到多个空项
isGet代表传入的选择器是否正确,有匹配的项目,没有就返回null
if (!isGet) {
ele = null;
}
这个是样式选择器,传入类型.xxxx的值,不懂你的uniqArray怎么写的,应该是将元素的样式变为字符串之类的,然后用元素的样式查询传入的选择器(要去掉第一个点内容,元素样式没有电)的是否在其中
(.indexOf()!=-1)
case '.':
for (var j = 0; j < eleLen; j++) {
var name = uniqArray(ele[j].className.split(' '));
if (name.indexOf(sele[i].substring(1)) !== -1) { //括号中内容的意思??
ele = ele[j];
isGet = true;
break;
}
}
break;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。