[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

智能推荐

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springfr_爪洼国窝窝岛娃娃村村民的博客-程序员宅基地

org.springfra`mework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.filterChains': Cannot resolve reference to bean 'org.springframework.security.web...

java.lang.UnsupportedClassVersionError 没找到这个错,各位大侠帮忙啊_va.lang.unsupportedclassversionerror: story/manage_david04280的博客-程序员宅基地

2012-6-4 21:46:39 org.apache.catalina.core.ApplicationContext log信息: Closing Spring root WebApplicationContext2012-6-4 21:54:58 org.apache.catalina.core.ApplicationContext log信息: Initializing Sp_va.lang.unsupportedclassversionerror: story/manage/listener/registrylistener

49个常用的css代码_css代码大全_苦夏木禾的博客-程序员宅基地

49个常用的css代码1、文字超出部分显示省略号2、中英文自动换行3、文字阴影4、设置placeholder的字体样式5、不固定高宽 div 垂直居中的方法6、解决IOS页面滑动卡顿7、设置滚动条样式8、实现隐藏滚动条同时又可以滚动9、css 绘制三角形10、Table表格边框合并11、css 选取第 n 个标签元素12、移动端软键盘变为搜索方式13、onerror 处理图片异常14、背景图片的大小15、文字之间的间距16、元素占满整个屏幕17、CSS实现文本两端对齐18、实现文字竖向排版19、使元素鼠标事_css代码大全

Maven总结_人类本质的博客-程序员宅基地

关于Maven的总结Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一小段描述信息来管理一个项目的构建、报告和文档。Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。Maven 可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。由于 Ma..._maven总结

网络流_1_最大流与最小割定理_最大流最小割定理_Henry_WYH的博客-程序员宅基地

网络流__1流网络如图为一个流网络,边权为最大流量c,记作G=(V,E)G=(V,E)G=(V,E)其中V为点集,E为边集。可以想象成从源点源源不断的将水流向汇点的过程从点u到点v的容量记作C(u,v)从点u到点v的容量记作C(u,v)从点u到点v的容量记作C(u,v)其中,不考虑反向边,假如有反向边,可以通过加点来转化成没有反向边的情况流量 定义:从源点往外净流出的量可行流即每一条边设计一个流量,记作设计的流量对应的方案f{1.容量限制0≤f(u,v)≤c(u,v)2_最大流最小割定理

ping命令常用参数_ping -s_识途老码的博客-程序员宅基地

简述ping命令原理和作用说说你理解的ping命令!答:ping命令是主机向目标主机发送一个icmp协议的回显报文请求,请求中附带有请求方主机的时间戳T1,目标主机收到请求后会记录时间戳T2# 计算过程方案一:本地记录时间戳客户端发出Ping包1,本地记录时间戳T1,当ping 包1返回时,记录时间戳T2,那么RTT = T2-T1就得到这个RTT。方案二:Ping包的Payload里记录发出时间戳T1当Ping包1被弹回时,记录当前时间T2,则RTT = T2-T1也可以_ping -s

随便推点

tomcat原理详解和请求过程(涉及网卡、套接字等)_tomcat客户端两个网络端口互相请求_凝孑·哒哒哒的博客-程序员宅基地

什么是tomcat 想要了解tomcat 原理我们首先要了解tomcat是什么,有什么功能,在什么地方起作用?一、网卡 首先我们知道如果一台计算机如果想要其他计算机交换数据的话,必须要走网卡的端口交换数据。网卡能够把把物理电信号转化成计算机能够识别的数字信号。网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。由于其拥有MAC地址,..._tomcat客户端两个网络端口互相请求

Flutter 微信分享功能实现_flutter 截图、qq分享、微信分享、微博分享_早起的年轻人的博客-程序员宅基地

1 集成插件使用插件 fluwx 点击这里查看最新版本fluwx: ^3.5.12 在微信开放平台注册开发者账号以及创建你的应用程序微信开放平台链接3 在分享页面错误一 未配置白名单-canOpenURL: failed for URL: "weixinULAPI://" - error: "This app is not allowed to query for scheme weixinulapi" <key>LSApplicationQueriesSchemes_flutter 截图、qq分享、微信分享、微博分享

python学习入门4输出语句与赋值语句 2018.8.17_salvare_000的博客-程序员宅基地

参照:python程序设计第三版 python programming:an introduction to computer science第二章:编写简单程序首先理解什么是“”元语言“” 元语言:计算机科学家开发的复杂的符号表示法(类似于模板) 我们依靠这种模板符号来表示语句的语法print语句print(&lt;expr&gt;,&lt;expr&gt;,...,se...

介绍 14 个 JavaScript 的框架和库_weixin_34232744的博客-程序员宅基地

Javascript 得到了众多的技术领导者的拥护和支持,其中一位就是 WordPress 的作者 Matt Mullenweg , 他表示WordPress 开发者 应该学习 JavaScript , 这也清晰地向 WordPress 社区传达了 JavaScript 在未来的重要性。 同时,这一观点也被普遍接受。向着更先进的技术靠拢与过渡也同时保证了 WordPress 在未来的挑战中不会落..._js有没有和数据库交互的框架

python调用java接口或者类_python如何调用java类_滴水吞舟的博客-程序员宅基地

由于 python 本身为脚本语言,且经常存在调用第三方库的情况,有的时候用 java 调用 python 不如用 python 调用 java 方便。下面就整理一下在 python 调用 java 过程中需要哪些操作。(默认是 linux 的 Ubuntu 上调用)首先 linux 上的 jdk 是一定需要安装的,这个过程在这里就不表了,python 都是 linux 自带的,这里默认是 pyt..._python脚本调用java接口

XSS之xss-labs-level19_xsslab19_煮酒笺华的博客-程序员宅基地

文章目录0x01 XSS-Labs0x02 实验工具0x03 实验环境0x04 实验步骤0x05 实验分析0x06 参考链接0x01 XSS-Labs  XSS(跨站脚本攻击)是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页或访问该页面中的内容之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。  XSS按照利用方式主要分为:反射型XSS、存储型XSS、DOM型XSS。反射型XSS是攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码_xsslab19

推荐文章

热门文章

相关标签