DOM节点的增删改查相关操作

【初学操作】

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div class="wrap">
		    <button class="btn">新增(元素)--放到父级</button>
		    <button class="btn">新增(元素)--插入同级</button>
		    <button class="btn">新增(文本)</button>
		    <button class="btn">新增(注释)</button>
		    <button class="btn">新增(属性)</button>
		    <button class="btn">新增(文档碎片)</button>
			<button class="btn">替换(元素)</button>
			<button class="btn">删除(元素)</button>
			<button class="btn">克隆(元素)</button>
		    <ul class="list">
		        <li>01</li>
		        <li class="second">02</li>
		        <li>03</li>
		        <li>04</li>
		    </ul>
		</div>
	</body>
	<script type="text/javascript">
		var btnList = document.getElementsByClassName("btn");
		var wrap = document.querySelector(".wrap");
		var ul = document.querySelector(".list");
		var second = document.querySelector(".second");
		
		var liList = ul.children;//获取ul的四个li孩子节点
		console.log(liList);
		
		//创建元素节点
		btnList[0].onclick = function(){
			var li = document.createElement("li");
			li.textContent = "新增li";
			li.style.backgroundColor = randColor();
			li.onclick = function(){
				var index = Array.from(liList).indexOf(this);
				//将获取到的伪数组liList转化为数组再使用数组的元素查找方法
				alert(index);
			}
			console.log(li);
		//绑定按钮事件生成新的元素节点后,选择如何放置节点
			// ul.appendChild(li);//在所有li的后面插入
			// ul.append(li,"hello");//先li后hello
			// ul.append(li,li);//无法实现同时插入两个
			// ul.prepend(li);//插在前面
			ul.appendChild(ul.firstElementChild);
			console.log(liList);
		}
		
		btnList[1].onclick = function(){
			var span = document.createElement("span");
			span.textContent = "我的新增的span";
			span.style.backgroundColor = randColor();
			span.onclick = function(){
				var index = Arr.from(liList).indexOf(this);
				alert(index);
			}
			console.log(span);
			
			// 插入同级  => 父元素统筹
			// 将一个节点(新的/页面中已存在的) 插入到 另一个节点的前面(页面已存在的)
			ul.insertBefore(span,second);//该span插入到了第二个li的前面(在ul的子元素second前面插入span)
			// second.insertAdjacentElement("afterbegin",span); // second.prepend() 在第二个li的内容前面插入span
		}
		
		//新增文本节点
		btnList[2].onclick = function(){
			var text = document.createTextNode("hello,这是新增的文本");
			console.log(text);
			second.appendChild(text);//在class为second这个li中插入新增的文本
		}
		
		//新增注释
		 btnList[3].onclick = function(){
		    var comment = document.createComment("嘿,这是一段注释");
		    second.appendChild(comment);
			console.log("111");
		}
			
		//新增属性节点
		btnList[4].onclick = function(){
			var attr = document.createAttribute("date-msg");
			attr.nodeValue = "hello";
			console.log(attr);
			//!!!!  将节点设置到指定元素中 (不能插入到元素内)
			ul.setAttributeNode(attr);//这时在ul的标签中就新增了一个属性和属性值:date-msg="hello"
			// 等价于
			// ul.setAttribute("data-msg","hello");
		}
		
		//新增文档碎片
		btnList[5].onclick = function(){
			var frg = document.createElement("li");
			for(var i=0;i<100;i++){
				var li = document.createElement("li");
				li.textContent = "新增的li";
				li.style.backgroundColor = randColor();
				li.onclick = function(){
					var index = Array.from(liList).indexOf(this);
					alert(index);
				}
				frg.appendChild(li);//暂存到文档碎片中
				}
				ul.appendChild(frg);
		}
		
		//替换元素节点
		btnList[6].onclick = function(){
		    if(second){
		        var li = document.createElement("li");
		        li.textContent ="我的新增的li"
		        li.style.backgroundColor = randColor();
		        li.onclick = function(){
		            var index = Array.from(liList).indexOf(this);
		            alert(index);
		        }
		        ul.replaceChild(li,second);
		        second = null;
		    }
		}
		
		//删除节点元素
		btnList[7].onclick = function(){
		    if(second){
		    // 自删
		        // second.remove();
		        // second = null;
		        // setTimeout(function(){
		        //     ul.insertBefore(second,ul.firstElementChild.nextElementSibling)
		        // },500)//利用这个操作可以看出其实即使删除了,但他的内存空间还没有被释放,
			//父删
		        ul.removeChild(second);
		        second = null;//所以要想彻底删除就要释放其内存空间
		    }
		}
		
		//克隆节点元素
		btnList[8].onclick = function(){
		    // ul.appendChild(ul.firstElementChild.cloneNode());
		    // var cloneEle = ul.firstElementChild.cloneNode(true);
		    // ul.appendChild(cloneEle);
		    var cloneUl = ul.cloneNode(true);
		    wrap.appendChild(cloneUl);
		}
		
		
		//随机获取颜色函数
		function randColor(){
			var str = "0123456789abcdef";
			var colorStr = "#";
			for(var i = 0;i<6;i++){
				var index = Math.floor(Math.random()*str.length);
				var char = str.charAt(index);
				colorStr += char;
			}
			return colorStr;
		}
	
		/*  创建节点
		  (1) 创建元素节点
		  document.createElement(tagName)  => 传入标签名,创建指定标签
		  
		  (2) 创建文本节点
		  document.createText(text)  => 根据传入的文本创建 文本节点
		 
		 (3) 创建注释节点
		  document.createComment(text)  => 根据传入的文本创建 注释节点
		 
		  (4) 创建属性节点
		  document.createAttribute(attrName)  => 根据传入的属性名创建 属性节点
		  在通过nodeValue 设置属性值
		 Element.setAttributeNode() 存到元素中
		 
		 (5) 创建文档碎片节点
		 document.createDocumentFragment() 创建文档碎片节点 => 用于暂存节点
		 
		 (6)节点的修改/替换
			parent.replaceChild(newNode,oldNode) 用一个节点(新的/已存在的),替换另一个节点(页面中已存在的)
			
			(7)节点的删除
    Element.remove()    自删
    parent.removeChild(node)  父删 => 由父元素统筹
	
			(8)节点的克隆
    cloneNode(deep) =>节点克隆
    deep 默认(false)  只克隆元素及其相关属性,至于元素内的子内容并不克隆
         (true)    既克隆元素及其相关属性,又克隆元素内的子内容 */
		 
		/* 
		 节点放置
		 (1) 放到父元素中 => 父元素统筹
		  parent.appendChild(Node);   向父节点中 追加 一个节点(新的/页面中已存在的) => 放在父元素所有内容的最后方
提示:如果文档树中已经存在了 newchild,它将从文档树中删除,然后重新插入它的新位置。如果 newchild 是 DocumentFragment 节点,则不会直接插入它,而是把它的子节点按序插入当前节点的 childNodes[] 数组的末尾。
可以利用 appendChild() 方法移除元素到另外一个元素。
		  
		   parent.append(String|Node); 向父节点中 追加 一个文本或节点(新的/页面中已存在的) => 放在父元素所有内容的最后方
		   parent.prepend(String|Node); 向父节点中 预追加 一个文本或节点(新的/页面中已存在的) => 放在父元素所有内容的最前方
		   
		  (2) 插入同级  => 父元素统筹
		   parent.insertBefore(newNode,oldNode);   将一个节点(新的/页面中已存在的) 插入到 另一个节点的前面(页面已存在的)
		  
		  insertAdjacentElement(position,element)  (了解):将指定的元素插入指定的位置
        position:
        position:相对于元素的位置。合法值是:
        afterbegin:就在元素内部,在它的第一个孩子之前。 (放在元素内部 第一个元素之前)
        beforeend:在元素的最后一个子元素之后。 (放在元素内部  最后一个子元素之后)
        beforebegin:在元素本身之前。 同级之前
        afterend:在元素本身之后。  同级之后
        element:您要插入的元素。 */
	</script>
</html>

posted @ 2022-04-01 08:37  嘻嘻不是菜鸟了  阅读(77)  评论(0)    收藏  举报