分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

学习blus老师js(4)--DOM

发布时间:2023-09-06 01:17责任编辑:彭小芳关键词:jsDOM

一、DOM节点

1.获取子节点:

childNodes 
nodeType         节点类型
children            只包括元素,不包括文本;  子节点只算第一层。只算孩子一级。
<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>无标题文档</title><script>window.onload=function (){ ???var oUl=document.getElementById(‘ul1‘); ???????//IE6-8 ???//alert(oUl.childNodes.length); ???for(var i=0;i<oUl.childNodes.length;i++) ???{ ???????//nodeType==3 ???-> ???文本节点 ???????//nodeType==1 ???-> ???元素节点 ???????//alert(oUl.childNodes[i].nodeType); ???????????????if(oUl.childNodes[i].nodeType==1) ???????{ ???????????oUl.childNodes[i].style.background=‘red‘; ???????} ???}};</script></head><body><ul id="ul1"> ???<li></li> ???<li></li></ul>aaaabbbbfafafsdfasd ???文本节点<span>qwerqwre 元素节点</span></body></html>
View Code

当获取ul1下面的childNodes时,chrome和FF下length都是5,因为把空的文本节点也算上了。

<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>无标题文档</title><script>window.onload=function (){ ???var oUl=document.getElementById(‘ul1‘); ???????//alert(oUl.children.length); ???for(var i=0;i<oUl.children.length;i++) ???{ ???????oUl.children[i].style.background=‘red‘; ???}};</script></head><body><ul id="ul1"> ???<li></li> ???<li></li></ul>aaaabbbbfafafsdfasd ???文本节点<span>qwerqwre 元素节点</span></body></html>
View Code

使用children获取到的length就是2了。

2.parentNode

例子:点击链接,隐藏整个li
<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>无标题文档</title><script>window.onload=function (){ ???var aA=document.getElementsByTagName(‘a‘); ???????for(var i=0;i<aA.length;i++) ???{ ???????aA[i].onclick=function () ???????{ ???????????this.parentNode.style.display=‘none‘; ???????}; ???}};</script></head><body><ul id="ul1"> ???<li>dfasdf <a href="javascript:;">隐藏</a></li> ???<li>45346 <a href="javascript:;">隐藏</a></li> ???<li>fghfgcvn <a href="javascript:;">隐藏</a></li> ???<li>vcbxcvbc <a href="javascript:;">隐藏</a></li> ???<li>757465867 <a href="javascript:;">隐藏</a></li></ul></body></html>
View Code

3.offsetParent

offsetparent: 找到有定位的父级;根据样式不同会发生变化;
 例子:获取元素在页面上的实际位置 
<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>无标题文档</title><style>#div1 {width:200px; height:200px; background:#CCC; margin:100px; }#div2 {width:100px; height:100px; background:red; position:absolute; left:50px; top:50px;}</style><script>window.onload=function (){ ???var oDiv2=document.getElementById(‘div2‘); ???????alert(oDiv2.offsetParent);};</script></head><body><div id="div1"> ???<div id="div2"></div></div></body></html>
View Code
 4.首尾子节点
有兼容性问题
firstChild、firstElementChild
lastChild 、lastElementChild
 
firstChild和之前的childNodes有一个共同的问题,可能是文本节点。
高版本的浏览器使用firstElementChild,获取第一个元素子节点。
 
兄弟节点
有兼容性问题
nextSibling、nextElementSibling
previousSibling、previousElementSibling
<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>无标题文档</title><script>window.onload=function (){ ???var oUl=document.getElementById(‘ul1‘); ???????//IE6-8 ???//oUl.firstChild.style.background=‘red‘; ???????//高级浏览器 ???//oUl.firstElementChild.style.background=‘red‘; ???????if(oUl.firstElementChild) ???{ ???????oUl.firstElementChild.style.background=‘red‘; ???} ???else ???{ ???????oUl.firstChild.style.background=‘red‘; ???}};</script></head><body><ul id="ul1"> ???<li>1</li> ???<li>2</li> ???<li>3</li></ul></body></html>
View Code
 二、操纵元素属性
元素属性操作
第一种:oDiv.style.display=“block”;
第二种:oDiv.style[“display”]=“block”;
第三种:Dom方式
 
DOM方式操作元素属性
获取:getAttribute(名称)
设置:setAttribute(名称, 值)
删除:removeAttribute(名称)
<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>无标题文档</title><script>window.onload=function (){ ???var oTxt=document.getElementById(‘txt1‘); ???var oBtn=document.getElementById(‘btn1‘); ???????oBtn.onclick=function () ???{ ???????//oTxt.value=‘asdfasd‘; ???????//oTxt[‘value‘]=‘xczcvb‘; ???????????????oTxt.setAttribute(‘value‘, ‘erwertwert‘); ???};};</script></head><body><input id="txt1" type="text" /><input id="btn1" type="button" value="按钮" /></body></html>
View Code
 三、DOM元素灵活查找
用className选择元素
如何用className选择元素
选出所有元素
通过className条件筛选
封装成函数
<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>无标题文档</title><script>function getByClass(oParent, sClass){ ???var aResult=[]; ???var aEle=oParent.getElementsByTagName(‘*‘); ???????for(var i=0;i<aEle.length;i++) ???{ ???????if(aEle[i].className==sClass) ???????{ ???????????aResult.push(aEle[i]); ???????} ???} ???????return aResult;}window.onload=function (){ ???var oUl=document.getElementById(‘ul1‘); ???var aBox=getByClass(oUl, ‘box‘); ???????for(var i=0;i<aBox.length;i++) ???{ ???????aBox[i].style.background=‘red‘; ???}};</script></head><body><ul id="ul1"> ???<li class="box"></li> ???<li class="box"></li> ???<li></li> ???<li></li> ???<li></li> ???<li class="box"></li> ???<li></li></ul></body></html>
View Code
 ========================================================================================================
 二、创建、插入和删除元素
创建DOM元素
  • createElement(标签名)  创建一个节点
  • appendChild(节点)  追加一个节点
  例子:为ul插入li
插入元素
  • insertBefore(节点, 原有节点)  在已有元素前插入
  例子:倒序插入li
<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>无标题文档</title><script>window.onload=function (){ ???var oBtn=document.getElementById(‘btn1‘); ???var oUl=document.getElementById(‘ul1‘); ???var oTxt=document.getElementById(‘txt1‘); ???????oBtn.onclick=function () ???{ ???????var oLi=document.createElement(‘li‘); ???????var aLi=oUl.getElementsByTagName(‘li‘); ???????????????oLi.innerHTML=oTxt.value; ???????????????//父级.appendChild(子节点); ???????//oUl.appendChild(oLi); ???????if(aLi.length>0) ???????{ ???????????oUl.insertBefore(oLi, aLi[0]); ???????} ???????else ???????{ ???????????oUl.appendChild(oLi); ???????} ???};};</script></head><body><input id="txt1" type="text"/><input id="btn1" type="button" value="创建li"/><ul id="ul1"></ul></body></html>
View Code
删除DOM元素
  • removeChild(节点)  删除一个节点
  例子:删除li
<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>无标题文档</title><script>window.onload=function (){ ???var aA=document.getElementsByTagName(‘a‘); ???var oUl=document.getElementById(‘ul1‘); ???????for(var i=0;i<aA.length;i++) ???{ ???????aA[i].onclick=function () ???????{ ???????????oUl.removeChild(this.parentNode); ???????}; ???}};</script></head><body><ul id="ul1"> ???<li>asfasd <a href="javascript:;">删除</a></li> ???<li>5645 <a href="javascript:;">删除</a></li> ???<li>ghdfjgj <a href="javascript:;">删除</a></li> ???<li>mvbnmvnb <a href="javascript:;">删除</a></li></ul></body></html>
View Code
文档碎片   ---------------------------->> 很少很少用了,对高级版本的浏览器几乎没有什么作用。可以不用了解了。
文档碎片可以提高DOM操作性能(理论上)
文档碎片原理
document.createDocumentFragment()
<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>无标题文档</title><script>window.onload=function (){ ???var oUl=document.getElementById(‘ul1‘); ???var oFrag=document.createDocumentFragment(); ???????for(var i=0;i<10000;i++) ???{ ???????var oLi=document.createElement(‘li‘); ???????//oUl.appendChild(oLi); ???????????????oFrag.appendChild(oLi); ???} ???????oUl.appendChild(oFrag);};</script></head><body><ul id="ul1"></ul></body></html>
View Code
 
  ========================================================================================================
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
------------

学习blus老师js(4)--DOM

原文地址:http://www.cnblogs.com/tenWood/p/7670174.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved