[js] querySelector、querySelectorAll、getElementById。封装选择器_aefg95955的博客-程序员宅基地

#

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>

    <body>
        <ul id='a'>
            <li class='b'>0</li>
            <li class='b'>1</li>
            <li class='b'>2</li>
            <li class='b'>3</li>
            <li class='b'>4</li>
        </ul>
        <script>
            //querySelector返回该元素后代元素中,第一个匹配选择器参数的后代元素。
            //如果没有匹配项,则返回 null。否则,返回第一个匹配的元素。
            
            //a与aa是一样的
            var a = document.body.querySelector('#a');
            console.log(a);
            console.log(a.innerText);
            var aa = document.body.querySelector('ul');
            console.log(aa);
            console.log(aa.innerText);
            
            //b与bb是一样的
            var b = document.body.querySelector('.b');
            console.log(b);
            console.log(b.innerText);
            var bb = document.body.querySelector('li');
            console.log(bb);
            console.log(bb.innerText);
            
            //querySelectorAll返回值是一个NodeList对象,所以不推荐使用 for...in去遍历它(会遍历出其他无关属性)
            //想要在它身上使用数组方法,必须先把它转换为真正的数组.
            var c = document.body.querySelectorAll('#a');
            console.info(c);
            console.info(c.innerText); //undefined    
            for (var i = 0; i < c.length; i++) {
                console.info(c[i]);
            }
            //for...in除了nodelist还会遍历出其他信息
            for (var k in c) {
                console.warn(c[k]);
            }
            
            //var d = document.body.querySelectorAll('#a').querySelector('.b');//不能这样用
            var e = document.getElementById("a").querySelector('.b');
            console.log(e);
            var f = document.getElementById("a").querySelectorAll('.b');
            console.log(f);
            var g = document.getElementById("a");
            console.log(g);
            var h = document.body.querySelector("#a");
            console.log(h);
            var i = document.body.querySelectorAll("#a");
            console.log(i);            
        </script>
    </body>

</html>

 #

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            html,
            body,
            ul,
            li {
                margin: 0;
                padding: 0;
                border: 0;
                list-style: none;
            }
        </style>
    </head>

    <body>
        <ul>
            <li class='branch bb'>1

                <div>aaa</div>
            </li>
            <li class='aa'>2
                <div>b</div>
            </li>
            <li class='aa'>3
                <div>c</div>
            </li>
            <li class='aa'>4
                <div>d</div>
            </li>
        </ul>

        <ul>
            <li class='branch bb'>1

                <div>axx</div>
            </li>
            <li class='aa'>2
                <div>b</div>
            </li>
            <li class='aa'>3
                <div>c</div>
            </li>
            <li class='aa'>4
                <div>d</div>
            </li>
        </ul>

        <script>
            var a = document.querySelectorAll('#trunk');
            var b = document.querySelectorAll('.branch');
            var c = document.querySelectorAll('.aa');
            var d = document.querySelectorAll('li');
            console.log(a);
            console.warn(b);
            console.log(c);
            console.log(d);
            var QM = (function() {
                var $ = function(Selector, Action, Func, Bind) {
                    if (Action) {
                        var i = 0;
                        var picker = document.querySelectorAll(Selector);
                        if (Bind !== 'off') {
                            while (i < picker.length) {
                                picker[i].addEventListener(Action, Func);
                                ++i;
                            }
                        } else {
                            while (i < picker.length) {
                                picker[i].removeEventListener(Action, Func);
                                ++i;
                            }
                        }
                    } else {
                        return document.querySelectorAll(Selector)[0];
                    }
                }
                return $;
            })();
            //          QM('#trunk', 'click', function() {
            //              console.log(this.innerHTML);
            //          });
            //          QM('.aa div', 'click', function() {
            //              console.log(this.innerHTML);
            //          });    
            QM('ul .bb div', 'click', function() {
                console.log(this.innerHTML);
            });
            QM('.bb').innerHTML = 'fsdfj123';
            (function($) {
                $.c = 'plus';
                $.d = function(v) {
                    console.log('xxoo', v);
                }
            })(QM);
            console.log(QM.c);
            QM.d('xx->');
        </script>
    </body>

</html>

 

#

var query = function(selector) {
                var reg = /^(#)?(\.)?(\w+)$/img;
                var regResult = reg.exec(selector);
                var result = [];
                //如果是id选择器
                if(regResult[1]) {
                    if(regResult[3]) {
                        if(typeof document.querySelector === "function") {
                            result.push(document.querySelector(regResult[3]));
                        }
                        else {
                            result.push(document.getElementById(regResult[3]));
                        }
                    }
                }
                //如果是class选择器
                else if(regResult[2]) {
                    if(regResult[3]) {
                        if(typeof document.getElementsByClassName === 'function') {
                            var doms = document.getElementsByClassName(regResult[3]);
                            if(doms) {
                                result = converToArray(doms);
                            }
                        }
                        //如果不支持getElementsByClassName函数
                        else {
                            var allDoms = document.getElementsByTagName("*") ;
                            for(var i = 0, len = allDoms.length; i < len; i++) {
                                if(allDoms[i].className.search(new RegExp(regResult[2])) > -1) {
                                    result.push(allDoms[i]);
                                }
                            }
                        }
                    }
                }
                //如果是标签选择器
                else if(regResult[3]) {
                    var doms = document.getElementsByTagName(regResult[3].toLowerCase());
                    if(doms) {
                        result = converToArray(doms);
                    }
                }
                return result;
            }

            function converToArray(nodes){
                  var array = null;         
                  try{        
                        array = Array.prototype.slice.call(nodes,0);//针对非IE浏览器         
                  }catch(ex){
                      array = new Array();         
                      for( var i = 0 ,len = nodes.length; i < len ; i++ ) { 
                          array.push(nodes[i])         
                      }         
                  }      
                  return array;
          }

 

#

转载于:https://www.cnblogs.com/qingmingsang/articles/5244857.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/aefg95955/article/details/101449152

智能推荐

python 获取参数 哪种好_寻找一种方法(最好是在Python中)在计算2个函数调用的结果时获得第二个参数值...-程序员宅基地

(嗯,不知怎么的乳胶不起作用了,我会把它作为图片上传):我就是这样实现的:def discriminant_function(x_vec, cov_mat, mu_vec):"""Calculates the value of the discriminant function for a dx1 dimensionalsample given covariance matrix and mean..._improvement from the last five jacobian evaluations. warnings.warn(msg, runt

制作手机浏览器显示格式的HTML页面-程序员宅基地

最近要推出手机支持访问的HTML页面效果,而这在制作手机页面的过程中状况连连。 主要一下就我制作的工程中所遇的问题说明一下:1. 改掉HTML页面声明:(以往大部分页面都是HTML4.0的声明)  还有很多参数可以配置大家可以google一下<!DOCTYPE HTML><html> <head> <m..._标准手机html格式

php生成海报-程序员宅基地

一、方法** * 生成宣传海报 * @param array 参数,包括图片和文字 * @param string $filename 生成海报文件名,不传此参数则不生成文件,直接输出图片 * @return [type] [description] */function createPoster($config=array(),$filename=""){ //如果要看报什么错,可以先注释调这个header if(empty($filename)) header("c_php生成海报

Tencent_人体分析_视频人像分割处理_betteryjs的博客-程序员宅基地

# import jsonimport cv2import requestsfrom tencentcloud.common import credentialfrom tencentcloud.common.profile.client_profile import ClientProfilefrom tencentcloud.common.profile.http_profile import HttpProfilefrom tencentcloud.common.exception.te

BugKuCTF 加密 滴答~滴_ctf 嗒嗒嗒,嗒嗒嗒-程序员宅基地

-... -.- -.-. - ..-. -- .. ... -.-.题解:摩斯密码_ctf 嗒嗒嗒,嗒嗒嗒

ASP.NET Core 中间件执行顺序_aspnetcore 中间件执行顺序-程序员宅基地

中间件顺序下图显示了 ASP.NET Core MVC 和 Razor Pages 应用的完整请求处理管道。 你可以在典型应用中了解现有中间件的顺序,以及在哪里添加自定义中间件。 你可以完全控制如何重新排列现有中间件,或根据场景需要注入新的自定义中间件。ASP.NET Core 中间件管道上图中的“终结点” 中间件为相应的应用类型(MVC 或 Razor Pages)执行筛选器管道。ASP.NET Core 筛选器管道..._aspnetcore 中间件执行顺序

随便推点

mybatis collection多级嵌套查询_mybatis嵌套查询排序_zhige@的博客-程序员宅基地

mybatis collection多级嵌套查询需求:一个页面有多个模块,一个模块有多个对应的图片,需要查询出来的json格式需要三层嵌套实体类/** * (MesaMenu)实体类 * * @author ran * @since 2021-03-17 11:38:27 */@Data@NoArgsConstructorpublic class MesaMenu implements Serializable { private static final long._mybatis嵌套查询排序

Keepalive+Haproxy部署-程序员宅基地

实验环境:IP备注172.16.3.225/21Keepalive-Master+Haproxy+Nginx172.16.3.226/21Keepalive-Backup+Haproxy+Nginx172.16.3.200/24VIP注:这里因为自己的环境有限为了更好地测试,所以就用两台机器。实验效果最终的实验效果是通过一个虚拟IP反向代理两台Nginx,当我们Keepalive-Master宕机VIP会转到Keepalive-Backup并且还可以正_keepalive+haproxy

linux 建立链接文件命令_linux创建链接_rjszcb的博客-程序员宅基地

每个文件都独自占用一个 inode,文件内容由 inode 的记录来指向;如果想要读取文件内容,就必须借助目录中记录的文件名找到该文件的 inode,才能成功找到文件内容所在的 block 块;ln 命令用于给文件创建链接,根据 Linux 系统存储文件的特点,链接的方式分为以下 2 种:软链接:类似于 Windows 系统中给文件创建快捷方式,即产生一个特殊的文件,该文件用来指向另一个文件,此链接方式同样适用于目录。硬链接:我们知道,文件的基本信息都存储在 inode 中,而硬链接指的就是给一个文_linux创建链接

Nginx基础入门(二)_nginx allow all-程序员宅基地

启动状态模块,默认该功能没启动分表代表:1:总连接数 1:成功连接数 9:总共处理的请求数1.1.1 目的:将主页设置成随机页面,是一种微调更新机制启动随机主页 需要调用:app.com/yellow.html目的:网页内容替换如果我们用模板生成网站的时候,因为疏漏或者别的原因造成代码不如意,但是此时因为文件数量巨大,不方便全部重新生成,那么这个时候我们就可以用此模块来暂时实现纠错。另一方面,我们也可以利用这个实现服务器端文字过滤的效果。(当服务器断电或者出错,可以快速使用此模块替换_nginx allow all

linux常用命令汇总_linux host disable lane-程序员宅基地

删除文件:linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可。直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字-r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思工具/原料Linux rm命令步骤/方法1删除文件夹实例:rm -rf /var..._linux host disable lane

黑解(ICCID)证书备份_黑解机保存资料怎么保存-程序员宅基地

黑解(ICCID)证书备份最近 ICCID 和黑解又回来了,这个教程旨在如何备份黑解或 ICCID 激活过后的激活证书,以便下次抹除或黑解(ICCID)失效时使用需要的条件一台可以越狱的 iPhone,且已经使用 ICCID(黑解)激活一台 Mac 或者安装了 Linux 的 PC 或者一台已经安装了 TWRP 的 Android 设备畅通的国际互联网链接合适的 USB 数据线步骤给您的 iPhone 越狱Mac 部分前往 https://checkra.in 下载适用于 macO_黑解机保存资料怎么保存