zoukankan      html  css  js  c++  java
  • Document 搜索:getElement*,querySelector*

    搜索:getElement*,querySelector*

    如何去获取页面上的任意元素?

    document.getElementById 或者只使用 id

    如果一个元素有 id 特性(attribute),那我们就可以使用 document.getElementById(id) 方法获取该元素,无论它在哪里。

    例如:

     
    <div id="elem">
      <div id="elem-content">Element</div>
    </div>
    
    <script>
      // 获取该元素
      let elem = document.getElementById('elem');
    
      // 将该元素背景改为红色
      elem.style.background = 'red';
    </script>

    querySelectorAll

    到目前为止,最通用的方法是 elem.querySelectorAll(css),它返回 elem 中与给定 CSS 选择器匹配的所有元素。

    在这里,我们查找所有为最后一个子元素的 <li> 元素:

     
    <ul>
      <li>The</li>
      <li>test</li>
    </ul>
    <ul>
      <li>has</li>
      <li>passed</li>
    </ul>
    <script>
      let elements = document.querySelectorAll('ul > li:last-child');
    
      for (let elem of elements) {
        alert(elem.innerHTML); // "test", "passed"
      }
    </script>

    这个方法确实功能强大,因为可以使用任何 CSS 选择器。

    querySelector

    elem.querySelector(css) 调用会返回给定 CSS 选择器的第一个元素。

    当我们遍历元素(例如数组或其他内容)并试图过滤那些我们感兴趣的元素时,这个方法会很有用。

    例如:

     
    <a href="http://example.com/file.zip">...</a>
    <a href="http://ya.ru">...</a>
    
    <script>
      // 不一定是 document.body.children,还可以是任何集合
      for (let elem of document.body.children) {
        if (elem.matches('a[href$="zip"]')) {
          alert("The archive reference: " + elem.href );
        }
      }
    </script>

    closest

    elem.closest(css) 方法会查找与 CSS 选择器匹配的最近的祖先。elem 自己也会被搜索。

    换句话说,方法 closest 在元素中得到了提升,并检查每个父级。如果它与选择器匹配,则停止搜索并返回该祖先。

    例如:

     
    <h1>Contents</h1>
    
    <div class="contents">
      <ul class="book">
        <li class="chapter">Chapter 1</li>
        <li class="chapter">Chapter 1</li>
      </ul>
    </div>
    
    <script>
      let chapter = document.querySelector('.chapter'); // LI
    
      alert(chapter.closest('.book')); // UL
      alert(chapter.closest('.contents')); // DIV
    
      alert(chapter.closest('h1')); // null(因为 h1 不是祖先)
    </script>

    getElementsBy*

    • elem.getElementsByTagName(tag) 查找具有给定标签的元素,并返回它们的集合。tag 参数也可以是对于“任何标签”的星号 "*"
    • elem.getElementsByClassName(className) 返回具有给定CSS类的元素。
    • document.getElementsByName(name) 返回在文档范围内具有给定 name 特性的元素。很少使用。

    实时的集合

    所有的 "getElementsBy*" 方法都会返回一个 实时的(live) 集合

    相反,querySelectorAll 返回的是一个 静态的 集合。就像元素的固定数组。

    总结

    有 6 种主要的方法,可以在 DOM 中搜索元素节点:

    方法名 搜索方式 可以在元素上调用? 实时的?
    querySelector CSS-selector -
    querySelectorAll CSS-selector -
    getElementById id - -
    getElementsByName name -
    getElementsByTagName tag or '*'
    getElementsByClassName class

    目前为止,最常用的是 querySelector 和 querySelectorAll,但是 getElement(s)By* 可能会偶尔有用,或者可以在旧脚本中找到。

    此外:

    • elem.matches(css) 用于检查 elem 与给定的 CSS 选择器是否匹配。
    • elem.closest(css) 用于查找与给定 CSS 选择器相匹配的最近的祖先。elem 本身也会被检查。

    让我们在这里提一下另一种用来检查子级与父级之间关系的方法,因为它有时很有用:

    • 如果 elemB 在 elemA 内(elemA 的后代)或者 elemA==elemBelemA.contains(elemB) 将返回 true。
  • 相关阅读:
    从aptitude 换回 apt-get .
    ubuntu 通过安装TOMCAT7
    第一次ubuntu使用的故障排除 ...the public key is not available: NO_PUBKEY...
    DES加密算法应用:分组加密模式
    使用“牛顿迭代法”求解方程
    html当中如何引用js文件
    javascript当中火狐的firebug如何单步调试程序?
    给出一个javascript的Helloworld例子
    java中讲讲PrintWriter的用法,举例?
    卷积和神经网络有什么关系?
  • 原文地址:https://www.cnblogs.com/perfectdata/p/15688892.html
Copyright © 2011-2022 走看看