2.DOM文档对象模型

68 阅读4分钟

就是js提供的操作页面元素的属性和方法。

获取页面元素

  • html 获取:document.documentElement
  • body 获取:document.body
  • head 获取:document.head
  • 通过ID:document.getElementById('id名称')返回值:这个ID对应的标签/null;
  • 通过class:document.getElementsByClassName('类名称')返回值:伪数组/空的伪数组;
  • 通过标签名:document.getElementsByTagName('标签名') 返回值:伪数组/空的伪数组;
  • 通过name属性名:document.getElementsByName('name的属性值') 返回值:伪数组/空的伪数组;(多用于input标签
  • 通过选择器:document.querySelector('css中选择器的书写样式') 返回值:伪数组(满足条件的第一个)/null
  • 通过选择器:document.querySelectorAll('css中选择器的书写样式') 返回值:伪数组/空的伪数组

操作元素的样式

行内样式:既可以获取,也可以设置

语法:元素.style.样式名 = '样式值',返回值:以字符串的形式返回结果,如果样式名有中划线,要使用数组关联法/驼峰命名法

非行内样式:只能获取,不能设置

语法:window.getComputedStyle(获取的元素).样式名,返回值:以字符串的形式返回结果,如果样式名有中划线,要使用数组关联法/驼峰命名法

操作元素的属性

  1. 原生属性:元素.属性名 = '属性值'

  2. 自定义属性

    普通的自定义属性:

    • 获取:元素.getAttribute(属性名)
    • 设置:元素.setAttribute(属性名,'属性值')
    • 删除:元素.removeAttribute(属性名)

    H5自定义属性:每一个元素天生自带一个属性:dataset,里面保存的都是和H5相关的属性,H5自定义属性都是以data-开头

    • 获取:元素.dataset.属性名 返回值就是该属性名对应的属性值
    • 设置:元素.dataset.属性名 = '属性值'
    • 删除:delete 元素.dataset.属性名

操作元素的类名

class的操作:

- 获取:元素.className    返回值:所有类名;
- 设置:元素.className='属性值'   特点:就是会替换掉之前的类名;
- 追加:元素.className +=' 属性值'    属性值前面要加个空格;

classList: *是每一个元素自带的属性,里面保存的就是所有类名*

- 添加:元素.classList.add(类名)
- 删除:元素.classList.remove(类名)
- 切换:元素.classList.toggle(类名)   如果之前有就是删除,没有就是添加

操作元素的文本内容

innerHtml:

获取:元素.innerHtml

设置:元素.innerHtml = '要设置的内容'   会完全覆盖式替换掉之前所有内容  ```会解析标签```

innerText:

获取:元素.innerText

设置:元素.innerText = '要设置的内容'   会完全覆盖式替换掉之前所有内容  ```不会解析标签,当文本输出```

value:(*一般使用在input标签上*)

获取:元素.value

设置:元素.value = '要设置的内容'   会完全覆盖式替换掉之前所有内容

获取元素尺寸

client:
    获取宽度
        语法:元素.clientWidth;
        返回值:内容宽度+左右padding(数值型)
    获取高度
        语法:元素.clientHeight
        返回值:内容高度+上下padding(数值型)
        *如果元素不占位,获取到的尺寸为0(displaynone   visbility:hidden;floatleftbox-sizingborder-box不适用)*  
offset:
    获取宽度
        语法:元素.offsetWidth
        返回值:内容宽度+左右padding+左右边框(数值型)
    获取高度
        语法:元素.offsetHeight
        返回值:内容高度+上下padding+上下边框(数值型)
        *如果元素不占位,获取到的尺寸为0    displaynone   visbility:hidden;floatleftbox-sizingborder-box不适用*

获取窗口尺寸

BOM级别的获取
    window.innerWidth      //包括导航条
    window.innerHeight     //包括导航条
DOM级别的获取
    document.documentElement.clientWidth        //不包括导航条的窗口
    document.documentElement.clientHeight       //不包括导航条的窗口

获取元素的偏移量

offset:
    获取的偏移量是相对于带有定位的父级元素,如果没有定位,则是相对于body
    获取向上的偏移量:
        元素.offsetTop      //相对于带有定位的父元素的左上角padding边缘偏移量,没有找到定位父元素返回距离body左上角的距离
    获取向左的偏移量:
        元素.offsetLeft     //*相对于带有定位的父元素的左上角padding边缘偏移量,没有找到定位父元素返回距离body左上角的距离*
client:
    获取的偏移量是padding区域相对于边框的左上角的距离
    获取向上的偏移量:
        元素.clientTop      //padding区域相对边框左上角的距离
    获取向左的偏移量:
        元素.clientLeft     //padding区域相对边框左上角的距离