DOM操作

Posted 转角90

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DOM操作相关的知识,希望对你有一定的参考价值。

DOM和BOM

DOM对象是文档(document)对象,页面中每一个元素(Element)抽象为一个个对象,

BOM是浏览器对象, navigator、location、history等对象

document对象

Document节点表示的整个载入的网页,它的实例是全局的document对象,它是DOM的入口,可以从document访问任意节点

  • html元素:document.documentElement
  • body元素:document.body
  • head元素:document.head
  • 文档声明:document.doctype
// 节点之间的导航
// 获取节点的导航
var bodyEl = document.body
// 1.1 获取body所有子节点
console.log(bodyEl.childNodes)
// 1.2 获取body的第一个子节点
var firstChild = bodyEl.firstChild
// 1.3 获取body中的注释
console.log(firstChild.nextSibling)
// 1.4 获取body的父节点
console.log(bodyEl.parentNode)

DOM继承关系图

节点导航

  • parentNode
  • previousSibling
  • nextSibling
  • childNodes
  • firstChild
  • lastChild

元素之间导航

  • children
  • firstElementChild
  • lastElementChild
  • parentElement
  • previousElementSibling
  • nextElementSibling

childeNodes与children的区别:childeNodes获取所有节点(注释、文本、换行.....),children获取所有子元素

form表单

  • document.forms
  • document.forms[0].elements
  • document.forms[0].elements.nameArg

获取元素的方法

nodeType节点类型

data/innerHTML/textContent/outerHTML

  • data/nodeValue 针对非元素节点获取文本内容
  • innerHTML box中的元素开始结束标签都会拿到
  • textContent 只会获取文本内容
  • outerHTML box本身都会拿到

hidden

if (boxEl.hidden === false) 
	boxEl.hidden = true
 else 
    boxEl.hidden = false


boxEl.hidden = !boxEl.hidden

attribute

  • 方法
    • el.hasAttribute(name):
    • el.getAttribute(name):
    • el.setAttribute(name,value)
    • el.removeAttribute(name)
    • attributes
  • 大小写不敏感
  • 值总是字符串类型
  • 标准的attribute,会在DOM对象上创建property,可以通过el.attr 获取

className/style/classList

// className
boxEl.className = \'xx aa\'

// style
boxEl.style.color = \'res\'
boxEl.style.fontSize = \'14px\'

boxEl.style.cssText = \'color:res;font-size:14px\' // 会覆盖
// 读取style
console.log(boxEL.style.fontSize)
console.log(getComputedStyle(boxEL).xxx)


// classList
/*
el.classList.add(class)
el.classList.remove(class)
el.classList.toggle(class): 如果存在则移除,如果不存在则添加
el.classList.contains(class): 检查给定类,返回true/false
*/

data-*/dataset

<h1 data-name="aa"></h1>
<script>
var h = document.querySelector("h1")
console.log(h.dataset.name) // aa
</script>

创建元素

// document.write(xx)
// boxE1.innerHTML = \'xxx\'

// 最推荐:document.createElement(\'h2\')
var h2El = document.createElement(\'h2\')
h2El.className = \'aa\'
h2E1.classList.add(\'bb\')
h2El.textContent = \'标题\'

// 将创建的元素插入
var boxEl = document.querySelector(\'.box\')
boxEl.append(h2E1)

/*
插入元素方式:
node.append(...nodes or string)
node.prepend(...nodes or string)
node.before(...nodes or string)
node.after(...nodes or string)
node.replaceWith(...nodes or string)
*/ 

移除元素

/*
boxEl.remove()
*/

克隆元素

/*
boxEl.cloneNode(true) true表示深度克隆
*/

位置

  • clientWidth=contentWidth+padding
  • clientHeight = contentHeight + padding
  • clientTop = border-top
  • clientLeft = border-left
  • offsetWidth: 元素完整的宽度 border+padding+contentWidth+滚动条
  • offsetTop:距离父元素Y
  • offsetLeft:距离父元素X
  • scrollHeight:可滚动的区域高度
  • scrollTop:滚出的距离

window的大小及滚动

  • innerWidth/innerHeight: 获取window窗口的宽度和高度(包括滚动条)
  • outerWidth/outerHeight: 获取window窗口的整个宽度和高度(包括调试工具、工具栏)
  • documentELement.clientHeight/documentElement.clientWidth: 获取html的宽度和高度(不含滚动条)
  • scrollX: X轴滚动的距离,针对window窗口,别名pageXOffset
  • scrollY: Y轴滚动的距离,针对window窗口,别名pageYOffset
  • scrollBy(x,y): 将页面滚动至相对当前位置的(x,y)位置
  • scrollTo(pageX,pageY): 将页面滚动至绝对坐标

以上是关于DOM操作的主要内容,如果未能解决你的问题,请参考以下文章

操作DOM

web性能优化--减少DOM操作

Jquery基础之DOM操作

使用JQuery操作DOM

操作DOM -------JavaScrip

使用JQuery操作DOM