【注】”W3C”文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态的访问和更新文档的内容、结构和样式

html css 页面内容
js 页面行为操作
【DOM】是打通html、css、js壁垒的一个工具
DOM中节点一共有三种
【注】在JS中所有节点都是对象

测试Div

元素节点:


属性节点: title = ‘属性节点’
文本节点: 测试Div

  1. document.getElementById()

【功能】通过当前元素节点的ID,获取对应元素节点
元素节点属性:
通过这个节点属性,访问他的一系列属性
tagName 获取元素节点的标签名
innerHTML 获取元素节点标签内的内容 解析标签

HTML属性的属性
id
title
style
className

  1. var div = document.getElementById('div')
  2. alert(div.tagName)
  3. alert(div.title)
  4. alert(div.innerHTML)

在style样式中,background-color 使用’-‘链接的属性访问的时候,要将’-‘去掉,然后将后续首字母大写

  1. document.getElementsByTagName(‘’)

node.getElementsByTagName(‘’)
【注】从node节点开始,找出所有符合条件的元素节点
参数:标签名
功能:获取当前页面上所有符合该标签名标准的元素节点
返回值: 一个装有符合条件的元素节点的数组

  1. var li = document.getElementsByTagName('li')//获取所有li标签
  2. alert(li.length)
  3. var ul = document.getElementsByTagName('ul')
  4. var li = ul.getElementsByTagName('li')//获取ul里面所有的li标签
  5. for(var i=0;i<li.length;i++){//遍历当前这个数组
  6. alert(li[i]);
  7. }
  1. document.getElementsByName(‘’)

参数:name的值
返回值: 装有符合条件的元素节点的数组
【注】name属性一般只有文本输入框的元素节点才有

  1. //var name = document.getElementsByName('hello')//获取name为hello的所有元素
  2. var div = document.getElementsById('div')
  3. var name = div.getElementsByName('hello')//获取div中所有name为hello的元素
  4. alert(name.length)
  1. document.getElementsByClassName(‘’)

功能:获取在某个节点中,所有符合条件的元素节点
参数: class
返回值: 所有符合条件的元素节点组成的数组
【注】getElementsByCLassName 在低IE版本中不支持

  1. //var className = document.getElementsByClassName('hello')//获取所有class为hello的元素节点
  2. var ul = document.getElementById('ul')
  3. var className = ul.getElementsByClassName('hello')//获取ul下所有class为hello的元素节点
  4. for( var i=0;i<className.length;i++){//遍历当前这个数组
  5. alert(className[i].innerHTML)
  6. }

封装函数,封装一个兼容ie的方法

  1. var elementByClassName = function( parent,classStr) {
  2. //<1>找到parent下所有的元素节点
  3. var node = parent.getElementsByCLassName('*');
  4. var results = [];//用来记录符合条件的元素节点
  5. for (var i = 0; i < node.length; i++ ) {
  6. if(node[i].ClassName == classStr){//遍历当前这个数组,找到class Name与classStr相等的元素
  7. results.push(node[i]);//符合的添加到数组中
  8. }
  9. return results;
  10. }
  11. }

set/getAttribute() 修改/获取 removeAttrite() 移除

【注】都是操作当前元素节点中某个属性的

  1. var div = document.getElementById('div')
  2. alert(div.title)
  3. alert(div.className)
  4. div.title = 'xxx'
  5. div.className = 'box'
  6. div.setAttribute('title','xxx')//修改当前div的title为xxx

上述两种方式的区别

  1. class属性范围区别,.操作是通过从className,而set/getAttribute是通过class
  2. set/getAttribute是用户自定义属性支持
  3. removeAttrite ```javascript

var div = document.getElementsTagName(‘div’) alert(div.getAttribute(‘class’))//获取div的class为box alert(div.setAttribute(‘class’,’box1’))//设置div的class为box1

alert(div.removeAttrite(‘border’))

  1. <a name="1h0iJ"></a>
  2. ### childNodes
  3. 获取当前元素节点的所有子节点 为一个数组<br />【注】节点可以分为元素节点、属性节点、文本节点,而这些节点又有三个非常有用的属性,分别为: nodeName、nodeType 和 nodeValue
  4. ```javascript
  5. <div><li></li><li></li><span></span></div>
  6. var div = document.getElementsByTagName('div')
  7. alert(div.childNodes[0])//输出第一个li(即这个数组里下标为0的元素)

删除空白节点

包括回车 换行 tab键 空格 都是字符
【问题】如何将空白节点取出
【注】识别出空白节点

/^\s+$/.test()
使用左侧的正则去进行验证,如果是空白节点,返回true,否则返回false

  1. //删除空白节点
  2. var removeSpaceNode = function(nodes) {
  3. var result = [];//用来存放不是空白节点的节点
  4. for( var 1 = 0;i < nodes.length; i++){
  5. //判断是否为空白节点
  6. if( nodes[i].nodeType == 3 && /^\s+$/.test(nodes[i].nodeValue)){
  7. contiune;
  8. }
  9. result.push(node[i])
  10. }
  11. return result
  12. }

ownerDocument 属性

【注】ownerDocuemnt
属性返回该节点的文档对象根节点,返回的对象相当于document

  1. var div = document.getElemnetsByTagName('div')
  2. alert(div.ownerDocument == document)//返回true

parentNode previousSibling nextSlibing

parentNode 返回该节点的父节点
previouSlbling 返回该节点的前一个同级节点
nextSlibing 返回该节点的后一个同级节点

  1. <div>
  2. <ul></ul>
  3. <li></li>
  4. <span></span>
  5. </div>
  6. var li = document.getElementsByTagName('li')
  7. alert(li.parentNode)//输出li的父节点,为div
  8. alert(li.previouSlbling)//输出li的前面一个同级节点为ul
  9. alert(li.nextSlibing)//输出li的后见一个同级节点为span

attribute

属性节点
attribute属性返回该节点的属性节点【集合】
集合特点:1. 不重复 2. 无序
attributes.length 返回属性节点个数

  1. var li = document.getElementsByTagName('li')
  2. alert(li.attributes.length)
  3. //访问其中一个节点
  4. alert(li.attributes.getNameItem('id'))
  5. 属性节点
  6. nodeName nodeType nodeValue
  7. 属性名 类型2
  8. alert(li.attributes.getNameItem('id').nodeName)
  9. alert(li.attributes.getNameItem('id').nodeType)
  10. alert(li.attributes.getNameItem('id').nodeValue)

createElement

createElement() 方法通过指定名称创建一个元素
【格式】document.createElement(标签名)

  1. var div = document.getElementByTagName('div')
  2. var btn = document.getElementById('btn')
  3. btn.onclick = function() {
  4. var newNode = createElement('span')
  5. div.appendChild('newNode')
  6. }

appendChild

【格式】parent.appendChild(newNode)
功能:将newNode插入到parent子节点的末尾

  1. var div = document.getElementByTagName('div')
  2. var btn = document.getElementById('btn')
  3. btn.onclick = function() {
  4. var newNode = createElement('span')
  5. div.appendChild('newNode')
  6. }

createTextNode()

【格式】document.createTextNode(‘文本’)
功能:创建文本节点

  1. var div = document.getElementByTagName('div')
  2. var btn = document.getElementById('btn')
  3. btn.onclick = function() {
  4. var newNode = createElement('span')
  5. var addText = createElement('文本内容')
  6. node.appendChild('addText')
  7. div.appendChild('newNode')
  8. }

直接创建一个带文本的元素节点(封装函数)

  1. var createElementWithTxt = function(tagName,Txt) {
  2. var node = document.createElement(tagName)
  3. var txt = document.createTxtNode(Txt)
  4. node.appendChild(txt)
  5. return node
  6. }

insertbefore

【格式】父节点.insertbefore(插入的节点,旧节点)
功能: 将要插入的节点插入到旧节点之前

  1. var node = createElementWithTxt('strong','文本')
  2. var span = document.getElementByTagName('span')[0]
  3. span.parentNode.insertbefore(node,span)//将node节点插入到span之前

封装一个insertafter()方法

  1. var insertAfter = function( newNode,oldNode) {
  2. //判断oldNode是否为最后一个节点
  3. var parent = oldNode.parentNode
  4. if(oldNode == parent.lastChild){//直接插入到子节点的末尾
  5. parent.appendChild(newNode);
  6. }else{
  7. //插入到oldNode节点的下一个节点之前
  8. parent.insertbefore(newNode,oldNode.nextSibling)
  9. }
  10. }

replaceChild()

【格式】parentNode.replaceChild(newNode,oldNode)
功能: 用newNode将oldNode替换

  1. var span = document.getElementsByTagName('span')
  2. var newNode = document.createElement('strong')
  3. span.parentNode.replaceChild(newNode,span)

cloneChild()

【格式】Node.cloneChild()
功能:克隆节点
返回值: 新克隆出来的节点
参数: true 默认是false 如果穿true,则会复制元素节点中的inner HTML

  1. var div = document.getElementsByTagName('div')[0];
  2. var span = document.getElementsByTagName('span');
  3. var newNOde = span.cloneChild(true);
  4. span.parentNode.insertbefore(newNOde,span);

removeChild()

【格式】node.parentNode.removeChild(node)
功能: 删除节点

  1. var div = document.getElementsByTagName('div')[0];
  2. var btn = document.getElementsById('btn')
  3. var span = document.getElementsByTagName('span');
  4. btn.onclick = function() {
  5. span.parentNode.removeChild(span)//删除span节点
  6. }