zoukankan      html  css  js  c++  java
  • JS选择器querySelector和~All,三个原生选择器

    定义:

    querySelector() 方法返回文档中匹配指定 CSS 选择器的一个元素。
    注意: querySelector() 方法仅仅返回匹配指定选择器的第一个元素。如果你需要返回所有的元素,请使用 querySelectorAll() 方法替代。
    语法
    document.querySelector(CSS selectors)
    参数值
    <body>
    <p>这是一个 p 与元素。</p>
    <p>这也是一个 p 与元素。</p>
    <p>点击按钮修改文档中第一个 p 元素的背景颜色。</p>
    <button onclick="myFunction()">点我</button>
    <script>
    function myFunction() {
        document.querySelector("p").style.backgroundColor = "red";
    }
    </script>
    </body>

    多选择器时:

    其他选择器:
    常见的其他获取元素的方法有3种,分别是通过元素ID、通过标签名字和通过类名字获取。

    1.DOM提供了一个名为getElementById的方法,这个方法将返回一个与之对应id属性的节点对象,它是document对象特有的函数,只能通过其来调用该方法,使用方法如下:document.getElementById('idName');
    2.getElementsByTagName方法返回一个对象数组(准确的说是HTMLCollection集合),返回元素的顺序是它们在文档中的顺序,传递给 getElementsByTagName() 方法的字符串可以不区分大小写,使用方法如下:document.getElementsByTagName(tagName);
    3.DOM还提供了getElementsByClassName方法来获取指定class名的元素,该方法返回文档中所有指定类名的元素集合,作为 NodeList 对象。NodeList 对象代表一个有顺序的节点列表。NodeList 对象 我们可通过节点列表中的节点索引号来访问列表中的节点(索引号由0开始), 所以有时使用时要指定下标,使用方法如下:document.getElementsByClassName('className');
    1 比较:
    2 获取页面I属性D为test的元素:
    3 document.getElementById("test");
    4 //or
    5 document.querySelector("#test");
    6 document.querySelectorAll("#test")[0];
    1 获取页面class属性为”red”的元素:
    2 document.getElementsByClassName('red')
    3 //or
    4 document.querySelector('.red')
    5 //or
    6 document.querySelectorAll('.red')
    由于querySelector是按css规范来实现的,所以它传入的字符串中第一个字符不能是数字.
    querySelector() 方法返回匹配指定 CSS 选择器元素的第一个子元素 。 该方法只返回匹配指定选择器的第一个元素。如果要返回所有匹配元素,需要使用 querySelectorAll() 方法替代.

    query选择符选出来的元素及元素数组是静态的,而getElement这种方法选出的元素是动态的。静态的就是说选出的所有元素的数组,不会随着文档操作而改变. 

    所以 在使用的时候getElement这种方法性能比较好,query选择符则比较方便.

    <div id="test1">
        <a href="http://www.bilibili.com/">哔哩哔哩</a>
        <a href="http://www.acfun.com/">ACfun</a>
        <a href="http://www.niconico.com/">泥扣泥扣</a>
    </div>
    <pid="bar">111</p>
        <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js">
        </script>
        <script>
            var d1 = document.getElementById('test1'),
                obj1 = d1.querySelector('div a'),
                obj2 = d1.querySelectorAll('div a');
            obj3 = $(d1).find('div a');
            console.log(d1) //DOM结构
            console.log(obj1) //<a href="http://www.bilibili.com/">哔哩哔哩</a>
            console.log(obj2.length) //3
            console.log(obj2)
            console.log(obj2[2])
            console.log(obj3) //null
        </script>

    getElementById获得一个DOM结构,注意querySelectorAll返回的是一个NodeList,不是一个数组,不是一个可观的DOM结构,可以试下打印obj2,只有加上下标可返回对应元素。

    记住不能通过下面这样的forEach遍历:
    document.querySelectorAll('div a').forEach(function() {
    });
     要想循环遍历querySelectorAll返回的结果,对于一个NodeList,我们可以用下面的技巧来循环遍历它:
    (利用回调函数转换this,原因在下一篇博客专门来解释)
    var divs = document.querySelectorAll('div');
    [].forEach.call(divs, function(div) {
      // do whatever
      div.style.color = "red";
    });
    当然,我们也可以用最传统的方法遍历它:
    var divs = document.querySelectorAll('div'), i;
    for (i = 0; i < divs.length; ++i) {
      divs[i].style.color = "green";
    }
     
    还有一种更好的方法,就是自己写一个:
    // forEach method, could be shipped as part of an Object Literal/Module
    var forEach = function (array, callback, scope) {
      for (var i = 0; i < array.length; i++) {
        callback.call(scope, i, array[i]); // passes back stuff we need
      }
    };
    // 用法:
    // optionally change the scope as final parameter too, like ECMA5
    var myNodeList = document.querySelectorAll('li');
    forEach(myNodeList, function (index, value) {
      console.log(index, value); // passes index + value back!
    });
     
    还有一种语法:for..of 循环,但似乎只有Firefox支持:
    /* Be warned, this only works in Firefox */
    var divs = document.querySelectorAll('div );
    for (var div of divs) {
      div.style.color = "blue";
    }
     
     
    ---------------------
    作者:Lawliet_ZMZ
    来源:CSDN
    原文:https://blog.csdn.net/major_zhang/article/details/78118823
  • 相关阅读:
    jvisualm 结合 visualGC 进行jvm监控,并分析垃圾回收
    linux 查看服务器cpu 与内存配置
    arthas 使用总结
    selinux contexts 安全上下文的临时更改
    Android 8.1 Doze模式分析(五) Doze白名单及Debug方式
    Window 任意窗口置顶软件Window TopMost Control
    Android ApkToolPlus一个可视化的跨平台 apk 分析工具
    SVN Please execute the 'Cleanup' command.
    Android 如何在64位安卓系统中使用32位SO库
    Android cmd命令查看apk是32位还是64位?
  • 原文地址:https://www.cnblogs.com/yuer20180726/p/11199965.html
Copyright © 2011-2022 走看看