魔鬼glen 2015-09-20 11:01 采纳率: 70%
浏览 1289

请问这段简单的query怎么理解?

 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;
}

万分感谢

  • 写回答

3条回答 默认 最新

  • 魔鬼glen 2015-09-20 11:33
    关注

    有大神帮帮忙吗???????????

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)