DOM对象、节点、获得节点的方法、操纵节点

210 阅读3分钟
DOM文档对象模型Document Object Model;当前载入页面所拥有的对象(代表当前文档)

DOM特点:
    通过DOM可以对整个HTML文档进行新建、添加、更新、删除等操作
    DOM模型符合WEB标准,兼容性好。
    通过DOM可以操作HTMLXHTMLXML文档。

a.jpg

DOM规则
    整个文档是一个文档节点
    每个HTML标签是一个元素节点
    包含HTML元素中的文本是文本节点
    每一个HTML属性是一个属性节点
    注释是注释节点
    
Document对象获得节点的方法
    通过ID获取文档节点
    document。getElementById(id)
    
    通过name属性获得文档节点集合(数组)
    document。getElementsByName(name);
    
    通过TagName(标记名称)标记获得文档节点集合(数组);
    document.getElementsByTagName(tagname)
    
    补充:querySelectorAll():选择括号内符合的所有选择器。返回值为nodelist
          var lis=document.query SelectorAll(Ti')://代表获得所有li
          
          querySelector():选择括号内符合的选择器内容,如果是多个,只返回第一个
          var h=document.querySelector(.bg)://返回调用class=bg的元素
          
          兼容:仅兼容支持css3的浏览器
          
节点名称:
    元素节点的nodename是标签名称
    属性节点名称是Attributes【下标】
    nodeValue是节点值
    对于文本节点,nodevalue属性包含文本
    对于属性节点,nodevalue属性包含属性值
    
    
对于节点的操作
    创建节点
        createElement()创建一个元素节点
        careateTextNode()创建一个文本节点
    添加节点
        appendChild(node)
            添加节点到当前节点内部的后面(新创建的节点)
            移动节点到当前节点内部的后面(已有节点)
        insertBefore(要添加或移动的节点,参考节点)
            添加节点到当前节点内部的前面(新创建的节点)
            移动节点到当前节点内部的前面(已有节点)
            
实例:
   var onenode=document.getElementById("one");//通过ID找到节点
    var hnode=document.createElement("h2");//创建新节点
    var tnode=document.createTextNode("hellow js");//文本节对象(类型对象)
    hnode.innerHTML="我是第一个节点h2";//向新节点里放文本信息
    onenode.appendChild(hnode);//父节点.appendChild(子节点对象)
    onenode.appendChild(tnode);
    
    //移动节点
    var butnode=document.getElementById("but");
    onenode.appendChild(butnode);
    
删除节点
    removeChild()删除子节点
    remove() 删除节点
    
复制节点
    cloneNode(true)深拷贝————除了复制节点,还复制所有子节点和文本节点
    cloneNode(false)浅拷贝————只复制节点
    
实例:
formnode.insertBefore(hnode.cloneNode(true),formnode.username)
    
替换节点
    replaceChild(新节点,被替换的节点)
    
判断节点是否有子节点
    hasChildNodes()判断是否有子节点
    
是否包含某节点
    contains()判断是否包含某节点(括号里必须是对象形式)
    if(a.contains(document.getElementsByTagName("span")[0])){
        alert("haha")
    }
    
更改为父节点
    parentNode:更改对象为当前节点的父节点
    
通过父节点更改为子节点
    firstChild更改为当前对象的第一个子节点(前面不能有空格,否则获得的是文本节点)、
    lastChild:更改为当前对象的最后一个节点子节点(后面不能有空格,否则获得是文本节点)
    
以集合方式更改为子节点(集合方式)
    childNode:更改为子节点的集合(下标从0开始)(包含文本和节点)
    children:更改为子节点集合(下标从0开始)(只包含节点)
    
更改为兄弟节点
    nextSibling:更改为下一个兄弟节点(后面不能有空格空格)
    previousSibling:更改为上一个兄弟节点(前面不能有空格)
    
实例://找到当前对象的其他兄弟对象
		//封装兄弟是需注意:在获得当前兄弟的其他元素时要用children
		// 返回的对象是对象类型或者是数组类型
		// 对象的命名和封装的命名需注意用语义化命名
		function siblings(pobj){
			//1、先找到当前对象
			var pobj=document.getElementById("p3");
			// 2、找到pobj的父级对象
			var fobj=pobj.parentNode;
			// 3、找到父级对象的所有子对象
			var arr=fobj.children;
			// 4、在父级对象所有的子对象中排除自己,获得其他兄弟
			var newarr=[];
			for(var i=0;i<arr.length;i++){
				if(arr[i]!=pobj){
					newarr.push(arr[i]);
				}
			}
			return newarr;
		}
		//调用封装好的function
		var returnvalue=siblings(document.getElementById("p3"));
		console.log(returnvalue);
		var returnls=siblings(document.getElementById("l1"))
		console.log(returnls)