节点(node)操作
一、节点的属性
- 节点值页面中的所有内容,包括标签、属性、文本
- nodeType,节点类型:如果是标签,则是1;如果是属性。则是2;如果是文本,则是3
- nodeName,节点名字:如果是标签,则是大写的标签,如果是属性,则是小写的属性;如果是文本,则是#text
- nodeValue,节点的值:如果是标签,则是null;如果是属性,则是属性值;如果是文本,则是文本内容
<p>我是一个p</p>
<div style="color: yellow">我是一个div</div>
<span>我是一个span</span>
<script>
//如果节点是标签
console.log(document.getElementsByTagName("p")[0].nodeType);//1
console.log(document.getElementsByTagName("p")[0].nodeName);//P-----大写
console.log(document.getElementsByTagName("p")[0].nodeValue);//null
//如果节点是属性
console.log(document.getElementsByTagName("div")[0].attributes[0].nodeType);//2
console.log(document.getElementsByTagName("div")[0].attributes[0].nodeName);//style-----小写
console.log(document.getElementsByTagName("div")[0].attributes[0].nodeValue);//color: yellow-----值
//如果节点是文本
console.log(document.getElementsByTagName("span")[0].childNodes[0].nodeType);//3
console.log(document.getElementsByTagName("span")[0].childNodes[0].nodeName);//#text
console.log(document.getElementsByTagName("span")[0].childNodes[0].nodeValue);//我是一个span-----值
</script>
二、获取节点和元素(12行代码)
<div>
<p>我是一个p</p>
<div>我是一个div</div>
<ul id="uu">
<li>第1个li</li>
<li>第2个li</li>
<li id="three">第3个li</li>
<li>第4个li</li>
<li>第5个li</li>
</ul>
<span>我是一个span</span>
</div>
<script>
//获取标签ul
var ulobj=document.getElementById("uu");
//1.父级节点
console.log(ulobj.parentNode);//div
//2.父级元素
console.log(ulobj.parentElement);//div
//3.子节点
console.log(ulobj.childNodes);//[text, li, text, li, text, li#three, text, li, text, li, text]
//4.子元素
console.log(ulobj.children);//[li, li, li#three, li, li]
//5.第一个子节点
console.log(ulobj.firstChild);//#text
//6.第一个子元素
console.log(ulobj.firstElementChild);//li
//7.最后一个子节点
console.log(ulobj.lastChild);//#text
//8.最后一个子元素
console.log(ulobj.lastElementChild);//li
//9. 某一个元素的前一个兄弟节点
console.log(document.getElementById("three").previousSibling);//#text
//10.某一个元素的前一个兄弟元素
console.log(document.getElementById("three").previousElementSibling);//li
//11.某一个元素的后一个兄弟节点
console.log(document.getElementById("three").nextSibling);//#text
//12.某一个元素的后一个兄弟元素
console.log(document.getElementById("three").nextElementSibling);//li
</script>
总结:凡是获取节点的代码,谷歌和火狐浏览器得到的都是相关节点,凡是获取元素的代码,在谷歌和火狐浏览器得到的都是相关的元素,
但是,从子节点和兄弟开始,凡是获取节点的代码在IE8中得到的是元素,获取元素的相关代码,得到的是undefined(表示不支持)
兼容性代码见案例3
三、案例
<!-- 例1:点击按钮设置div中p标签改变背景颜色 -->
<input type="button" value="改变颜色" id="btn">
<div id="dv">
<span>我是一个span</span>
<a href="#">我是一个链接</a>
<p>我是一个p</p>
<h5>我是一个\(^o^)/~</h5>
<div>我是一个div</div>
</div>
<script>
document.getElementById("btn").onclick=function(){
//获取里面所有的字节点,返回一个数组
var nodes=document.getElementById("dv").childNodes;
//循环遍历所有的子节点
for(var i=0;i<nodes.length;i++){
//判断这个子节点是不是p标签
if(nodes[i].nodeType==1&&nodes[i].nodeName=="P"){
nodes[i].style.backgroundColor="yellow";
}
}
};
</script>
<!-- 例2:节点操作隔行变色 -->
<input type="button" value="变色" id="btn">
<ul id="uu">
<li>我是第1个li</li>
<li>我是第2个li</li>
<li>我是第3个li</li>
<li>我是第4个li</li>
<li>我是第5个li</li>
</ul>
<script>
document.getElementById("btn").onclick=function(){
//记录有多少个li
var count=0;
//获取ul所有的子节点
var nodes=document.getElementById("uu").childNodes
console.log(nodes);
//循环遍历这些节点
for(var i=0;i<nodes.length;i++){
//判断这个节点是不是li节点
if(nodes[i].nodeType==1&&nodes[i].nodeName=="LI"){
nodes[i].style.backgroundColor=count%2==0?"red":"yellow";
count++;//记录出现li的次数
}
}
};
</script>
<script>
//element.firstChild------>谷歌和火狐获取的第一个子节点
//element.firstChild------>IE8获取的第一个子元素
//element.firstElementChild------>谷歌和火狐是第一个子元素,IE8不支持
//例3-1:获取任意一个父级元素的第一个子级元素
function getFirstElementChild(element){
if(element.firstElementChild){//支持
return element.firstElementChild;
}else{
var node=element.firstChild;//第一个子节点
while(node&&node.nodeType!=1){//存在,并且不是标签
node=node.nextSibling;//循环下一个节点,直到是标签,跳出循环
}
return node;//返回一个是标签的节点(即是元素了)
}
}
//例3-2:获取任意一个父级元素的最后一个子级元素
function getLastElementChild(element){
if(element.lastElementChild){
return element.lastElementChild;
}else{
var node=element.lastChild;
while(node&&node.nodeType!=1){
node=node.previousSibling;
}
return node;
}
}
//例3-3:获取任意一个元素的后一个兄弟元素
function getNextElementSibling(element){
if(element.nextElementSibling){
return element.nextElementSibling;
}else{
var node=element.nextSibling;
while(node&&element.nodeType!=1){
node=node.nextSibling;
}
return node;
}
}
//例3-4:获取任意一个元素的前一个兄弟元素
function getpreviousElementSibling(element){
if(element.previousElementSibling){
return element.previousElementSibling;
}else{
var node=element.previousSibling;
while(node&&element.nodeType!=1){
node=node.previousSibling;
}
return node;
}
}
</script>
<!-- 例4:点击小图,切换背景图片 -->
<div id="mask">
<img src="1big.png" alt="" width="100">
<img src="2big.png" alt="" width="100">
</div>
<script>
//获取所有的子元素
var imgobjs=document.getElementById("mask").children;
//循环遍历所有的img,注册点击事件
for(var i=0;i<imgobjs.length;i++){
imgobjs[i].onclick=function(){
document.body.style.backgroundImage="url("+this.src+")";//写法:如果里面是变量,内外都是双引号,如果里面是字符串就是写死了,里面是单引号
} }
</script>

<!--例5: 全选和全不选的实现 -->
<table border="1" cellpadding="0" cellspacing="0">
<thead>
<tr>
<td><input type="checkbox" name="" id="tball">全选</td>
<th>菜名</th>
<th>饭店</th>
</tr>
</thead>
<tbody id="tb">
<tr>
<td><input type="checkbox" name="" id=""></td>
<td>青菜</td>
<td>某某饭店</td>
</tr>
<tr>
<td><input type="checkbox" name="" id=""></td>
<td>白菜</td>
<td>某某饭店</td>
</tr>
<tr>
<td><input type="checkbox" name="" id=""></td>
<td>萝卜</td>
<td>某某饭店</td>
</tr>
</tbody>
</table>
<script>
//获取全选的复选框
var ckall=document.getElementById("tball");
//获取tbody的所有的小复选框
var cks=document.getElementById("tb").getElementsByTagName("input");
//点击全选复选框,获取当前的状态,然后设置tbody的所有复选框的状态
ckall.onclick=function(){
for(var i=0;i<cks.length;i++){
cks[i].checked=this.checked;
}
};
//获取tbody的所有复选框,分别注册点击事件
for(var i=0;i<cks.length;i++){
cks[i].onclick=function(){
var flag=true;//默认都被选中
//判断手否所有的复选框都选中
for(var j=0;j<cks.length;j++){
if(cks[j].checked==false){//有一个没选中
flag=false;
break;//跳出这个循环体
}
}
ckall.checked=flag;
};
}
</script>

节点(node)操作的更多相关文章
- TreeView节点拖拉操作1
TreeView节点拖拉操作1 //事先设置 TreeView1.DragMode= dmAutomatic; unit Unit1; interface uses Windows, Me ...
- DOM 节点node
DOM可以将任何HTML或XML文档描绘成一个有多层节点构成的结构,即在HTML中所有内容都是节点.文档节点是每个文档的根节点,文档节点有一个子节点,称为文档元素.每个文档只能有一个文档元素.在HTM ...
- elasticsearch负载均衡节点——客户端节点 node.master: false node.data: false 其他配置和master 数据节点一样
elasticSearch的配置文件中有2个参数:node.master和node.data.这两个参 数搭配使用时,能够帮助提供服务器性能. 数据节点node.master: false node. ...
- 33. Extjs中的tree节点的操作
转自:https://blog.csdn.net/masterShaw/article/details/51354351?utm_source=blogkpcl9 ext 树节点操作 tree ...
- Linux内存描述之内存节点node–Linux内存管理(二)
日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.7 X86 & arm gatieme LinuxDeviceDrivers Linux内存管理 #1 ...
- Kubernetes Python Client 初体验之node操作
今天讲一下k8s中对于各个实物节点node的操作. 首先是获取所有nodes信息: self.config.kube_config.load_kube_config(config_file=" ...
- Longhorn 企业级云原生分布式容器存储-券(Volume)和节点(Node)
内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生分布式块存储解决方案设计架构和概念 Longhorn 企业级云原生容器存储解决方 ...
- dom节点的操作
dom节点的操作 -- jQuery 内部插入 1.(结尾)append 方法 . appendto方法(为了方便链式操作) (开头)prepend方法 $('#div1').ap ...
- openstack中彻底删除计算节点的操作记录
在使用openstack的过程中,我们经常会添加好几台计算节点来部署虚拟机,在后续使用中由于某些原因,一些计算节点出现了问题,需要将这些出了问题的计算节点从openstack的控制节点中踢出去!但是很 ...
随机推荐
- PAT甲级题分类汇编——杂项
本文为PAT甲级分类汇编系列文章. 集合.散列.数学.算法,这几类的题目都比较少,放到一起讲. 题号 标题 分数 大意 类型 1063 Set Similarity 25 集合相似度 集合 1067 ...
- 【Linux】一步一步学Linux——Unix发展史(02)
目录 00. 目录 01. 请参考Unix传奇 02. 03. 00. 目录 @ 本博客后面会更新 01. 请参考Unix传奇 链接: https://coolshell.cn/articles/23 ...
- try except 异常捕获的方法、断言的使用
except as e中的'e'的作用总结 - 2puT - CSDN博客 Python使用try except处理程序异常的三种常用方法分析 Python3和Python2 异常处理except的不 ...
- springboot整合druid、mybatis
目的: 1.springboot配置数据库连接池druid 测试druid中url监控 2.springboot整合mybatis 测试查删案例 3.springboot整合pagehelper sp ...
- 在论坛中出现的比较难的sql问题:15(生成动态删除列语句 分组内多行转为多列)
原文:在论坛中出现的比较难的sql问题:15(生成动态删除列语句 分组内多行转为多列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 1.如果去掉这个临时表中合计为0 ...
- C#在DataTable中使用LINQ
LINQ 查询适用于实现的数据源 IEnumerable<T>接口或System.Query.IQueryable接口. DataTable类默认是没有实现以上接口的. 所以要在DataT ...
- gradle上传jar包到maven公共仓库
首先这里说的中央仓库 是指的 https://issues.sonatype.org/ 而不是maven私服. 其次是使用gradle上传jar包,maven上传,网上有很多教程,这里不做赘述. 首选 ...
- 苹果appstore应用名下面的开发者名称填写或修改
最近上架不小心遇到一个问题,开发者名称写错了,放假前大意了,记录一下修改过程,希望碰到同样问题的伙伴不要要着急,下面的内容可能帮你哦. 我们应用的之前的开发者名称是个人的,之前没注意这个问题,以后想注 ...
- weblogic jdbc 相关概念介绍
weblogic jdbc 是什么? 如何配置? 常见问题? 如何监控?
- mysql各版本驱动
http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.9/