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(' '); //为什么要空格去替换空格呢?
把多个连续空格替换为单个空格,再切分。这样切分出来的不会有空项。
if (name.indexOf(sele[i].substring(1)) !== -1)
name中包含sele[i]去掉第一个字符后的内容。为什么!==,这个应该是判断类型,再判断不等。
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;