DOM以及元素的操作(下)

 

目录

一、节点属性

1、nodeType

2、nodeName

3、nodeValue

汇总

二、操作 DOM 节点

1、创建一个节点

2、向页面中加入一个节点

3、删除页面中的某一个节点

4、修改页面中的某一个节点

三、获取元素的偏移量

offsetLeft和offsetTop

clientLeft和clientTop

四、获取元素尺寸

offsetWith 和 offsetHeight

clientWidth 和 clientHeight

五、获取浏览器窗口尺寸


本篇博客的内容主要包括元素节点的属性、元素节点的增删改查、获取元素偏移量和尺寸

一、节点属性

节点分为:元素节点、属性节点、文本节点

我们知道节点会分成很多种,而且我们也能获取到各种不同的节点,接下来我们就来聊一些各种节点之间属性的区别。

<body>
  <ul test="我是 ul 的一个属性">
    <li>hello</li>
  </ul>
​
  <script>
    // 先获取 ul
    var oUl = document.querySelector('ul')
    
    // 获取到 ul 下的第一个子元素节点,是一个元素节点
    var eleNode = oUl.firstElementChild
    
    // 获取到 ul 的属性节点组合,因为是个组合,我们要拿到节点的话要用索引
    var attrNode = oUl.attributes[0]
​
    // 获取到 ul 下的第一个子节点,是一个文本节点
    var textNode = oUl.firstChild
  </script>
</body>

1、nodeType

  • nodeType:获取节点的节点类型,用数字表示

console.log(eleNode.nodeType) // 1
console.log(attrNode.nodeType) // 2
console.log(textNode.nodeType) // 3
  • nodeType === 1 就表示该节点是一个 元素节点
  • nodeType === 2 就表示该节点是一个 属性节点
  • nodeType === 3 就表示该节点是一个 注释节点

2、nodeName

  • nodeName:获取节点的节点名称

console.log(eleNode.nodeName) // LI
console.log(attrNode.nodeName) // test
console.log(textNode.nodeName) // #text
  • 元素节点的 nodeName 就是 大写标签名
  • 属性节点的 nodeName 就是 属性名
  • 文本节点的 nodeName 都是 #text

3、nodeValue

  • nodeValue: 获取节点的值

console.log(eleNode.nodeValue) // null
console.log(attrNode.nodeValue) // 我是 ul 的一个属性
console.log(textNode.nodeValue) // 换行 + 空格
  • 元素节点没有 nodeValue
  • 属性节点的 nodeValue 就是 属性值
  • 文本节点的 nodeValue 就是 文本内容

汇总

节点分类nodeTypenodeNamenodeValue
元素节点1大写标签名null
属性节点2属性名属性值
文本节点3#text文本内容

二、操作 DOM 节点

  • 我们所说的操作无非就是 增删改查(CRUD)

  • 创建一个节点(因为向页面中增加之前,我们需要先创建一个节点出来)

  • 向页面中增加一个节点

  • 删除页面中的某一个节点

  • 修改页面中的某一个节点

  • 获取页面中的某一个节点

1、创建一个节点

  • createElement:用于创建一个元素节点

// 创建一个 div 元素节点
var oDiv = document.createElement('div')
​
console.log(oDiv) // <div></div>
  • 创建出来的就是一个可以使用的 div 元素

  • createTextNode:用于创建一个文本节点

// 创建一个文本节点
var oText = document.createTextNode('我是一个文本')
​
console.log(oText) // "我是一个文本"

2、向页面中加入一个节点

  • appendChild:是向一个元素节点的末尾追加一个节点

  • 语法: 父节点.appendChild(要插入的子节点)

// 创建一个 div 元素节点
var oDiv = document.createElement('div')
var oText = document.createTextNode('我是一个文本')
​
// 向 div 中追加一个文本节点
oDiv.appendChild(oText)
​
console.log(oDiv) // <div>我是一个文本</div>
  • insertBefore:向某一个节点前插入一个节点

  • 语法: 父节点.insertBefore(要插入的节点,插入在哪一个节点的前面)

<body>
  <div>
    <p>我是一个 p 标签</p>
  </div>
  
  <script>
    var oDiv = document.querySelector('div')
    var oP = oDiv.querySelector('p')
    
    // 创建一个元素节点
    var oSpan = document.createElement('span')
    
    // 将这个元素节点添加到 div 下的 p 的前面
    oDiv.insertBefore(oSpan, oP)
    
    console.log(oDiv)
    /*
        <div>
            <span></span>
            <p>我是一个 p 标签</p>
        </div>
    */
  </script>
</body>

3、删除页面中的某一个节点

  • removeChild:移除某一节点下的某一个节点

  • 语法:父节点.removeChild(要移除的字节点)

<body>
  <div>
    <p>我是一个 p 标签</p>
  </div>
  
  <script>
    var oDiv = document.querySelector('div')
    var oP = oDiv.querySelector('p')
    
    // 移除 div 下面的 p 标签
    oDiv.removeChild(oP)
    
    console.log(oDiv) // <div></div>
  </script>
</body>

4、修改页面中的某一个节点

  • replaceChild:将页面中的某一个节点替换掉

  • 语法: 父节点.replaceChild(新节点,旧节点)

<body>
  <div>
    <p>我是一个 p 标签</p>
  </div>
  
  <script>
    var oDiv = document.querySelector('div')
    var oP = oDiv.querySelector('p')
    
    // 创建一个 span 节点
    var oSpan = document.createElement('span')
    // 向 span 元素中加点文字
    oSpan.innerHTML = '我是新创建的 span 标签'
    
    // 用创建的 span 标签替换原先 div 下的 p 标签
    oDiv.replaceChild(oSpan, oP)
    
    console.log(oDiv)
    /*
        <div>
            <span>我是新创建的 span 标签</span>
        </div>
    */
  </script>
</body>

三、获取元素的偏移量

  • 就是元素在页面上相对于参考父级的左边和上边的距离

offsetLeft和offsetTop

offsetLeft:获取元素距离浏览器最左边的距离

offsetTop:获取元素距离浏览器顶部的距离

注意:这两个方法,得到的结果的参考点是:定位父级。也就是参考点是距离要获取偏移量元素的最近的一个有定位的祖先元素。如果都没有定位,默认参考点就是浏览器,或者说是body。

clientLeft和clientTop

clientLeft:获取距离自身border左边的距离

clientTop:获取距离自身border顶部的距离

如果没有设置border,那么获取到的值就是0 0.

四、获取元素尺寸

  • 就是获取元素的 "占地面积"

offsetWith 和 offsetHeight

  • offsetWidth : 获取的是元素 内容 + padding + border 的宽度

  • offsetHeight : 获取的是元素 内容 + padding + border 的高度

clientWidth 和 clientHeight

  • clientWidth : 获取的是元素 内容 + padding 的宽度

  • clientHeight : 获取的是元素 内容 + padding 的高度

注意:

  • 获取到的尺寸是没有单位的数字;

  • 当元素在页面中不占位置的时候, 获取到的是 0;

    • display: none; 元素在页面不占位

    • visibility: hidden; 元素在页面占位

五、获取浏览器窗口尺寸

  • 我们之前学过一个 innerWidthinnerHeight

  • 他们获取到的是窗口包含滚动条的尺寸

  • 下面我们学习两个不包含滚动条的尺寸获取方式

document.documentElement.clientWidth:通过document获取可视窗口宽度(不包括滚动条)

document.documentElement.clientHeight:通过document获取可视窗口高度。

上述两种方法,和window.innerWidth、window.innerHeight的区别就是:

window.innerWidth算宽度是包含滚动条的,而document.documentElement.clientWidth不包含滚动条的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值