JavaScript | DOM拓展属性

209 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

前言

JavaScript是基础并且是非常重要的一部分,现在项目基本都靠框架开发,很多原生方法得不到使用就会慢慢忘记,所以借着6月更文好好复习一下基础知识,今天开始DOM的拓展属性。

获取和设置元素的内容

innerHTML、innerText、textContent、outerHTML、outerText获取和设置的区别

innerHTML

  • 获取的时候,标签被当做字符串获取到了,能拿到对象里的所有内容,但不包含当前对象本身
  • 设置的时候,字符串中的标签直接被解析

outerHTML

  • 获取的时候,标签被当做字符串获取到了,能拿到对象里的所有内容,并且包含当前对象本身
  • 设置的时候,直接把当前元素替换掉了,字符串中的标签直接被解析

innerText

  • 获取的时候,只获取元素中的文本节点内容 但是获取的是浏览器浏览器所显示的内容 比如样式设置display:none就获取不到,与outerText同理,而textContent则可以获取到位none的内容
  • 设置的时候,字符串中的标签不会被解析

textContent

  • 获取的时候,只获取元素中的文本节点内容,但是获取的文本内容和代码结构有关 如而已获取
  • 设置的时候,字符串中的标签不会被解析
  • textContent兼容性差 ie9及以上

outerText

  • 获取的时候,只获取元素中的文本节点内容
  • 设置的时候,直接替换当前外部元素,字符串中的标签不会被解析

代码示例

    <body>
         <button id="btn">设置</button> 
         <div class="outer">
            <a href="###">当前文本内容</a>
            <a href="###">当前文本内容</a>        
        </div>
    </body>
    
    <script>
           var oOut = document.querySelector('.outer')
           var oBtn = document.getElementById('btn')
           
           oBtn.onclick = function(){
               //获取和设置都是同理,不做设置的打印了
               console.log(oOut.innerHtml) //只打印当前对象下的所有内容
               /*
               <a href="###">当前文本内容</a>
               <a href="###">当前文本内容</a>
               */
               
               console.log(oOut.outHtml) //打印当前对象下的所有内容并包含对象本身
              /*
              <div class="outer"> 
                   <a href="###">当前文本内容</a>
                   <a href="###">当前文本内容</a>        
              </div>
              */
              
              console.log(oOut.innerText) //当前文本内容 当前文本内容
              console.log(oOut.outerText) //当前文本内容 当前文本内容
              console.log(oOut.textContent) //会打印出下列格式,textContent获取内容和代码结构有关
              /*
              当前文本内容 
              当前文本内容
              */
           }
    </script>

属性操作

简述自有属性和自定义属性的区别

读取属性值 ele.getAttribute(属性名)

  • 自有属性

    • 可以直接通过 元素对象.属性名 获取到
    • 如果某些自有属性和js的关键字冲突了,那么就会把当前自有属性获取的方法修改,比如class属性获取的时候 可以通过className获取
  • 自定义属性

    • 不能直接通过 元素对象.属性名 获取到,因为他在当前元素的自有属性上没有找到该属性,则会把当前元素对象当作一个js对象,去获取他的属性了
    • 自定义属性要通过getAttribute去找,才能去元素的属性上找当前自有属性

设置属性值

  • 自有属性:直接设置
  • 自定义属性:setAttribute(key,value)

删除属性值

  • 自有属性
  1. 直接设置为空字符串
  2. 表单的一些属性 直接设置为false
  • 自定义属性: removeAttribute

h5自定义属性

  • h5自定义属性需要添加data-* 前缀
  • h5给每一个元素提供了一个dataset属性,是一个对象,保存的是当前元素所有的自定义属性,只要对 dataset这个对象操作属性 就是给当前元素操作自定义属性
    • 获取属性:ele.dataset.key
    • 设置属性:ele.dataset = value
    • 删除自定义属性:delete ele.dataset.key

下面就用自定义属性来写一个例子

效果图(注意看右边的添加自定义事件)

动画.gif

<body>
    <button id="btn">变色</button>
        <ul class="box">
       <li></li>
       <li></li>
    </ul>
    </body>
    
    <script>
           var oBtn = document.getElementById('btn')
           var oLi = document.querySelectorAll('.box li')
           
           //遍历绑定所有li 点击时添加标记
           oLi.forEach(function(item,index){
               item.onclick = function(){
                //给被点击的元素添加一个自定义属性作为标记
                  item.dataset.click = "true"
               }
           })
           
           oBtn.onclick = function(){
               oLi.forEach(function(item,index){
                   if(item.dataset.click){
                      item.style.background = "red"
                      //当效果已经完成后 可以把标记去掉
                    delete item.dataset.click
                   }
               })
           }
    </script>
    
    <style>
          .box{
              display:flex;
          }
          li{     
                  display:block;
                  margin: 10px;
                  width:100px;
                  height:100px;
                  background:skyblue           
              }
    </style>

好了,以上就是本篇文章的分享,感谢阅读!