DOM的认识

71 阅读3分钟
  1. cookie 与 storage 的区别?

    *      * 出现时间
    *          cookie: 有 JS 的时候就有了
    *          storage: 有 H5 以后才有的
    *      * 存储大小
    *          cookie: 4kb
    *          storage: 20MB
    *      * 前后端交互(前端向后端发送请求)
    *          cookie: 交互时请求默认携带 cookie
    *          storage: 交互式请求不会携带, 除非前端人员配置传递
    *      * 前后端操作
    *          cookie: 不管前后端语言都可以操作
    *          storage: 只能有前端语言来操作   (JS)
    *      * 过期时间:
    *          cookie: 默认会话级, 页面关闭, 存储消失; 可以通过手动配置
    *          storage: 不能通过手动配置
    * 
    *  2. localStorage 与 sessionStorage 的区别?
    *      * 过期时间:
    *          localStorage: 永久存储, 除非手动清理
    *          sessionStorage: 会话级别, 关闭页面, 存储就失效
    

获取非常规DOM

 <div>
        <p>hhhh <span>yyyyy</span></p>
    </div>
    <script>
        // 1. 获取非常规 DOM(HTML  head body)
        // 1.1 HTML语法: document.documentElement
        var htmlEle = document.documentElement
        // console.log(htmlEle)

        // 1.2 head 语法: document.head
        var headEle = document.head
        // console.log(headEle)

        // 1.3 body 语法: document.body
        var bodyEle = document.body
        console.log(bodyEle)
        
        
        

获取常规语法DOM

<div class="box" id="box2">我是具有 class 的box2</div>
<div class="box">我是具有 class 的box1</div>
<p>我是一个P标签</p>
<div class="box">我是具有 class 的box3</div>
<script>
    /**
     *  JS 在获取常规元素时与 CSS 一样, 可以通过 类名, 标签名, ID名
    */

    // 1.1 通过 类名 去获取 标签
    var oBox = document.getElementsByClassName('box')
    // console.log(oBox)
    /**
     *  oBox 是一个伪数组, 想要获取到某一个元素, 可以通过下标
     * 
     *      伪数组: 长得和数组类似, 有下标有length, 但是没有数组的常用方法
     * 
     *  不管页面具有这个 类名的 元素 有多少个, 获取到的永远是 伪数组的形式
    */

    // 1.2 通过 标签名 去获取标签
    var oDiv = document.getElementsByTagName('div')
    // console.log(oDiv)
    // console.log(oDiv[0])
    /**
     * oDiv 也是一个伪数组, 想要获取到某一个元素, 可以通过下标
    */

    // 1.3 通过 ID名 去获取标签
    var oBox2 = document.getElementById('box2')
    // console.log(oBox2)
    /**
     *  因为 ID 通常都是独一无二的
     *  所以 这里获取到的就是一个具有 box2 ID 名的标签, 而不是一个伪数组
    */

    // 2.1 按照选择器的形式 获取标签满足条件的第一个
    var myDiv = document.querySelector('.box')
    console.log(myDiv)
    /**
     *  querySelector: 获取到满足条件的 第一个标签
    */

    // 2.2 按照选择器的形式 后去所有满足条件的标签
    var myDivAll = document.querySelectorAll('.box')
    console.log(myDivAll)
    /**
     *  querySelectorAll: 获取到满足条件的 所有标签
    */

07_innerHTML与innerText

        我是 DIV 的文本
        <p>
            我是 P 的文本
            <span>
                我是 SPAN 的文本
            </span>
        </p>
        <div>
            我是内部 DIV 的文本
        </div>
    </div>
    <script>
        // 获取页面的 DIV 标签
        var oDiv = document.querySelector('div')    // 获取满足条件的第一个标签  条件: div
        // console.log(oDiv)

        // 获取属性
        /**
         *  innerHTML
         *      获取到标签内部的文本与 HTML 结构
         *  innerText
         *      只会获取到 页面结构的文本内容, HTML结构会被忽略掉
        */
        // console.log(oDiv.innerHTML)
        // console.log('====================')
        // console.log(oDiv.innerText)


        // 操作元素的属性
        /**
         *  innerHTML
         *      赋值时 会识别 字符串中的 html结构
         *      如果有实际的标签, 会把它当成标签渲染到页面上
         *  innerText
         *      赋值时 不会识别 字符串中的 html 结构
         *      如果有实际的标签, 会把它当成 字符串 渲染到页面上
        */
        // oDiv.innerHTML = '1234567890'
        oDiv.innerHTML = '<div>12345678555590<div>'


        // oDiv.innerText = '1234567890'
        // oDiv.innerText = '<div>1234567890<div>'




            元素属性


  <div class="box" a="100" b="200">我是一个具有很多属性的 DIV 标签</div>
<script>
    // 需求: 获取元素的某些属性

    // 1. 获取元素
    var oBox = document.getElementsByClassName('box')[0]
    console.log(oBox)

    // 2. 获取元素的某些属性
    // 语法: 元素.getAttribute('要查询的属性名')
    console.log(oBox.getAttribute('class'))
    console.log(oBox.getAttribute('a'))
    console.log(oBox.getAttribute('b'))

    // 新需求: 修改某些元素的某些属性
    
    // 3. 设置元素的某些属性
    // 语法: 元素.setAttribute('要设置的属性名', '要设置的属性值')
    oBox.setAttribute('a', 'qwer')
    oBox.setAttribute('b', 'asdf')
    oBox.setAttribute('qqq', 'qqqq123123')
    console.log(oBox.getAttribute('a'))


    // 4. 移出元素的某个属性
    // 语法: 元素.removeAttribute('要移除的属性名')
    oBox.removeAttribute('b')
    
    
    H5自定义属性
    
     <div qq="123" data-cs="123456789">H5新增自定义属性</div>

<script>
    /**
     *  data-cs="123456789"
     *      H5 自定义属性中 data-       是固定的
     *      cs 是我实际的 属性名
     *      "123456789" 是我实际的 属性值
    */

    var oDiv = document.querySelector('div')
    console.log(oDiv)

    // 获取 H5 自定义属性
    // 1. 获取语法: 元素.dataset.属性名
    console.log(oDiv.dataset.cs)

    // 2. 设置语法
    oDiv.dataset.cs = 'qwertyuiop'  // 标签中实际拥有; 做修改操作
    oDiv.dataset.age = 18           // 标签中实际没有; 做新增操作

    // 3. 删除
    delete oDiv.dataset.age