• JS-DOM


    refer to: https://www.udemy.com/course/the-web-developer-bootcamp/


    Document Object Model - JS

    • The DOM is a JavaScript representation of a webpage
    • It's your JS "window" into the contents of a webpage
    • It's just a bunch of objects that you can interact with via JS.

    Document

    • The document object is our entry point into the world of the DOM. It contains representations of all the content on a page, plus tons of useful methods and properties.

    SELECT

    1. document.getelementById('id')
    2. document.getelementByTagName('TagName')
    3. document.getelementByClassName('ClassName')
    • getElementById
      • function changeColor(newColor) {
          var elem = document.getElementById('para');
          elem.style.color = newColor;
        }
    • getElementByTagName
    • getElementByClassName

    querySelector,找到并返回第一个匹配项

    querySelectorAll,找到所有匹配项的合集

    根据id找,属性值前面加#; 根据class找,属性值前面加.  

    • // finds first h1 element
      document.querySelector('h1');
      
      //finds first element with ID of red
      document.querySelector('#red');
      
      //find first element with Class of big
      document.querySelector('.big');
      
      //find the input element whose type is checkbox
      document.querySelector("input[type = 'checkbox']");

    MANIPULATE

    • innerHTML, textContent/innerText

            change innerText

    • document.querySelector("span").innerText = 'Disgusting';
    • manipulating attributes

             change src and alt text of a img element

    • document.querySelector("img").src = 'https://www.flaticon.com/svg/static/icons/svg/3523/3523063.svg';
      document.querySelector("img").alt = 'chicken';
    • changing styles, key word: “.style”, 内容用引号括起来!!!
    • document.querySelector('#container').style.textAlign = 'center';
      
      document.querySelector('img').style.width = '150px';
      
      document.querySelector('img').style.borderRadius = '50%';
    • Rainbow Text
    • const colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']; //PLEASE DON'T CHANGE THIS LINE!
      
      //YOU CODE GOES HERE: 7 individual spans, each holds a single letter, 
      const spans = document.querySelectorAll("span");
      //querySelectorAll找出所有的spans
      for(let i = 0; i < 7; i++){ spans[i].style.color = colors[i]; }

    • getAttribute/ setAttribute/ .classList/ .classList.add() / .classList.remove() /classList.contains() / classList.toggle()
    • 页面DOM里的每个节点上都有一个classList对象,我们可以新增、删除、修改节点上的CSS类。还可以使用classList判断某个节点是否被赋予了某个CSS类。

    •  以下代码中的border, purple都是写在css里面可以供调用的。 

    • const h2 = document.querySelector("h2");
      
      h2.classList //没有括号,返回所有的class列表
      
      h2.classList.add('border')//属性覆盖,如果已经存在,即更新,不存在,即加上这个属性
      
      h2.classList.add('purple')
      
      h2.classList.remove('border') //去掉这个属性
      
      h2.classList.contains('border') //return true/false
    • toggle: 当元素上没有这个CSS类时,它就新增这个CSS类;如果myDiv元素已经有了这个CSS类,它就是删除它。就是反转操作。

    • 实现反转效果,js代码里面必须对每一个<li></li>单独操作
    <!DOCTYPE html>
    
    <head>
        <title>ClasList</title>
        <!--LEAVE THESE LINES ALONE, PLEASE! THEY MAKE THE LIVE PREVIEW WORK!-->
        <script src="node_modules/babel-polyfill/dist/polyfill.js" type="text/javascript"> </script>
        <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
        <link rel="stylesheet" href="app.css">
    
    </head>
    
    <body>
        <!--LEAVE THIS FILE ALONE!-->
        <ul>
            <li>Hello</li>
            <li class="highlight">Hello</li>
            <li>Hello</li>
            <li>Hello</li>
            <li class="highlight">Hello</li>
            <li>Hello</li>
        </ul>
        <script src="app.js"></script>
    </body>
    
    </html>
    app.css
    li { background-color: #B10DC9; } .highlight { background-color: #7FDBFF; }
    const lists = document.querySelectorAll("li");
    
    for (let list of lists) {
        list.classList.toggle("highlight")
    }
    •  traversing parent/child/sibling
      • .parentElement, 每一个元素都只有一个直系的parent,但是可能会有多个直系的children
        • .parentElement.parentElement.parentElement。可以一层一层往上找到祖宗,曾祖宗
      • .children,返回一个孩子的集合,按照文档的顺序排列的
        • .childrenElementCount计算孩子个数
        • .children[i] 定位到第i个孩子
        • .children[i].parentElement又回到parent 
      • .previousSibing VS .previousElementSibing,nextSibling VS nextElementSibling, 一般使用.ElementSibing可以精准定位到姊妹元素, 而.Sibing很多时候会包含一些空格什么的。

       notes: 定位孩子,姊妹,父亲结点的时候需要先找到一个基准点(通常使用 const base = document.querySelector('#red'); 然后根据这  个base来找其孩子,姊妹,父亲

    • Append& AppendChild,
      • How to make a new DOM element: .createElemen('tag name'), tag_name = img, div, ...
        • const newImg = document.createElement('img(tag_name)')
      • set attributes for new created element: 根据元素的属性添加对应的属性值
        • newImg.src = "http://zxbnxbcnsbj"
        • newH3.innerText = 'I am a new h3'
        Append it on our page: .appendChild
        • document.body.appendChild(newImg)
      • change the class of the new appended element
        • newImg.classList.add('square'). //css里面设置图片为正方形的属性
      • append VS appendChild
        • append可以同时插入多个不同的结点,可以直接把文字插在后面(append taxt into something directly),例如paragrapg.append('xxxxxx'),内容直接是添加在那个段落的下一句的(inside of the paragraph),而不是另起一个段落
      • prepend, appending before something directly
      • InsertAdjacentElement
        • The insertAdjacentElement() method of the Element interface inserts a given element node at a given position relative to the element it is invoked upon.
        • targetElement.insertAdjacentElement(position, element)
        • 还可以直接.after/ .before添加姊妹结点,但是有些浏览器不支持
    • exercie: append 100 buttons inside of div
    • <!DOCTYPE html>
      
      <head>
          <title>100 Buttons!</title>
      </head>
      
      <body>
          <!--DO NOT TOUCH THIS FILE PLEASE!-->
          <h1>Look At All My Buttons!</h1>
          <div id="container">
          
          </div>
      </body>
      
      </html>
      // WRITE YOUR CODE IN HERE:
      const div = document.querySelector('div')
      
      
      for(let i = 0; i < 100; i++){
          const btn = document.createElement('BUTTON')
          btn.innerText = "Hey!"
          div.appendChild(btn);
      }

      思考:为什么 const btn = document.createElement('BUTTON')   btn.innerText = "Hey!"要写在for 循环里面呢?

    • remove/removeChild
      • old version: b.parentElement.removeChild(b) 通过移除父母的孩子来移除当前元素
      • new version: node.remove();
  • 相关阅读:
    2011大纽约区域赛试题 Decoding EDSAC Data 解题报告
    湘大OJ第1484题 Allocation of Memory
    谈谈对js作用域的理解与疑问,请各位指正。
    Closure Linter工具介绍,挺好用的。
    JSTL标签用法
    守柔WORD编程代码集 CHM版
    返回任意输出月的最后一天
    Spring中MultipartHttpServletRequest实现文件上传
    SPringMVC注解驱动 .
    账号正在另一客户端登录 判断方法
  • 原文地址:https://www.cnblogs.com/LilyLiya/p/14290976.html
Copyright © 2020-2023  润新知