zoukankan      html  css  js  c++  java
  • JS之DOM篇节点内容

    innerHTML

    innerHTML属性是一个可读写属性。在读模式下,返回调用元素的所有子节点。在写模式下,会用指定的新值替换调用元素原先的所有子节点

    <p id="test">This is a <i>simple</i> document</p>
    <script>
    console.log(test.innerHTML) // 'This is a <i>simple</i> document'
    test.innerHTML = 123
    console.log(test.innerHTML) // '123'
    
    //  如果将innerHTML属性设为空,等于删除所有它包含的子节点
    test.innerHTML = ''
    console.log(test.childNodes.length) // 0
    </script>
    

    在效率上,使用innerHTML要比使用appendChild()方法添加DOM的性能高

    <ul id="listOne"></ul>
    <ul id="listTwo"></ul>
    <script>
      // appendChild()
      console.time('one')
      for (let i = 0; i < 1000; i++) {
        let newLi = document.createElement('li')
        listOne.appendChild(newLi)
      }
      console.timeEnd('one') // one: 6.257080078125ms
    
      // innerHTML
      console.time('two')
      let html = ''
      for (let i = 0; i < 1000; i++) {
        html += '<li></li>'
      }
      listTwo.innerHTML = html
      console.timeEnd('two') // two: 2.46484375ms
    </script>
    

    注意: 如果innerHTML属性用“+=”操作符重复追加一小段文本,效率会非常低,因为它既要序列化又要解析

    <ul id="listThree"></ul>
    <script>
      console.time('three')
      for (let i = 0; i < 1000; i++) {
        listThree.innerHTML += '<li></li>'
      }
      console.timeEnd('three') // three: 856.999755859375ms
    </script>
    

    outerHTML

    outerHTML属性也是一个可读写属性,与innerHTML不同的是它包含了调用元素本身。在读模式下,outerHTML返回调用元素以及所有子节点。在写模式下,会用指定的新值替换调用元素以及所有子节点

    <p id="test">This is a <i>simple</i> document</p>
    <script>
    console.log(test.outerHTML) // '<p id="test">This is a <i>simple</i>document</p>'
    test.outerHTML = '<div id="test"></div>'
    console.log(test.outerHTML) // '<div id="test"></div>'
    </script>
    

    innerText

    innerText是一个可读写属性,在读模式下,它会按照由浅入深地顺序,将子文档树中的所有文本拼接起来并返回。在写模式下,会用指定的新值相应的文本值替换所有子节点

    <p id="test">This is a <i>simple</i> document</p>
    <script>
    console.log(test.innerText) // 'This is a simple document'
    test.innerText = '<div>hello world</div>'
    // 即使插入的节点包含元素节点,也只会作为字符串在内部显示
    console.log(test.innerText) // '<div>hello world</div>'
    </script>
    

    小技巧: 利用innerText属性过滤掉所有的HTML标签

    <p id="test">This is a <i>simple</i> document</p>
    <script>
    test.innerText = test.innerText
    console.log(test.innerHTML) // 'This is a simple document'
    </script>
    

    outerText

    在读取文本值时,outerText与innerText的结果完全一样。在写模式下,outerText会替换调用元素本身以及元素的所有子节点

    <p id="test">This is a <i>simple</i> document</p>
    <script>
    console.log(test.outerText) // 'This is a simple document'
    test.outerText = 'This is a simple document'
    // 由于test节点已经不存在,所以报错了
    console.log(test.outerText) // Uncaught ReferenceError: test is not defined
    </script>
    

    textContent

    textContent属性与innerText属性类似,也是一个可读写属性。与innerText不同的是,textContent属性适用于所有节点,而innerText只适用于元素节点

    <p id="test">This is a <i>simple</i> document</p>
    <script>
    var text = test.childNodes[0]; // 文本节点
    console.log(test.textContent) // 'This is a'
    console.log(test.innerText) // undefined
    </script>
    
    优秀文章首发于聚享小站,欢迎关注!
  • 相关阅读:
    C#将datatable生成easyui的绑定tree 的json数据格式
    asp.net DataTable转JSON
    asp.net面试题
    windows笔记线程的一些性质
    windows笔记创建线程的另一个函数_beginthreadex
    windows笔记【内核对象线程同步】等待定时器内核对象
    windows笔记用哪个创建线程CreateThread还是_beginthread
    windows笔记【内核对象线程同步】信标内核对象
    windows笔记【内核对象线程同步】事件内核对象
    windows笔记【内核对象线程同步】等待函数
  • 原文地址:https://www.cnblogs.com/yesyes/p/15352402.html
Copyright © 2011-2022 走看看