一、节点的属性

  • 节点值页面中的所有内容,包括标签、属性、文本
  • 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)操作的更多相关文章

  1. TreeView节点拖拉操作1

      TreeView节点拖拉操作1 //事先设置 TreeView1.DragMode= dmAutomatic;   unit Unit1; interface uses   Windows, Me ...

  2. DOM 节点node

    DOM可以将任何HTML或XML文档描绘成一个有多层节点构成的结构,即在HTML中所有内容都是节点.文档节点是每个文档的根节点,文档节点有一个子节点,称为文档元素.每个文档只能有一个文档元素.在HTM ...

  3. elasticsearch负载均衡节点——客户端节点 node.master: false node.data: false 其他配置和master 数据节点一样

    elasticSearch的配置文件中有2个参数:node.master和node.data.这两个参 数搭配使用时,能够帮助提供服务器性能. 数据节点node.master: false node. ...

  4. 33. Extjs中的tree节点的操作

      转自:https://blog.csdn.net/masterShaw/article/details/51354351?utm_source=blogkpcl9 ext 树节点操作   tree ...

  5. Linux内存描述之内存节点node–Linux内存管理(二)

    日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.7 X86 & arm gatieme LinuxDeviceDrivers Linux内存管理 #1 ...

  6. Kubernetes Python Client 初体验之node操作

    今天讲一下k8s中对于各个实物节点node的操作. 首先是获取所有nodes信息: self.config.kube_config.load_kube_config(config_file=" ...

  7. Longhorn 企业级云原生分布式容器存储-券(Volume)和节点(Node)

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生分布式块存储解决方案设计架构和概念 Longhorn 企业级云原生容器存储解决方 ...

  8. dom节点的操作

    dom节点的操作 -- jQuery 内部插入 1.(结尾)append 方法 . appendto方法(为了方便链式操作) (开头)prepend方法           $('#div1').ap ...

  9. openstack中彻底删除计算节点的操作记录

    在使用openstack的过程中,我们经常会添加好几台计算节点来部署虚拟机,在后续使用中由于某些原因,一些计算节点出现了问题,需要将这些出了问题的计算节点从openstack的控制节点中踢出去!但是很 ...

随机推荐

  1. Linux 进程控制

    分享知乎上看到的一句话,共勉: 学习周期分为学习,思考,实践,校正四个阶段,周期越短,学习效率越高. 前面讲的都是操作系统如何管理进程,接下来,看看用户如何进行进程控制. 1.进程创建 先介绍一下函数 ...

  2. Python开发【第一章】:简介和入门

    Python简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承. ...

  3. vue 的 solt 子组件过滤

    如上图: 1.定义了一个类似下拉的组件 mySelect , 然后里面有自定义的组件 myOptions 2.有很多时候,我们希望, mySelect 组件内部的子组件,只能是 myOptions . ...

  4. mouseenter 与 mouseover 区别于选择

    mouseover事件, 箭头在子元素移动会触发冒泡事件,  子元素的鼠标箭头可触父元素方法, 相反,mouseenter事件功能与mouseover类似, 但鼠标进入某个元素不会冒泡触发父元素方法. ...

  5. Markdown试试

    from os import time print("haha") from os import time print("haha") time.time()! ...

  6. Java8新特性 - Optional容器类

    Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用null 表示一个值不存在,现在Optional 可以更好的表达这个概念.并且可以避免空指针异 ...

  7. Spring Cloud Alibaba学习笔记(5) - 整合Sentinel及Sentinel规则

    整合Sentinel 应用整合Sentinel 在dependencies中添加依赖,即可整合Sentinel <dependency> <groupId>com.alibab ...

  8. 淘宝API总结

    1. 淘宝客API https://open.alimama.com/?spm=a219t.11816995.1998910419.d8546b700.2a8f75a5C0NajI#!/documen ...

  9. C#ModBus Tcp的学习及Master的实现

    Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式. 所以这也是我们工控领域软件开发的所必懂的通讯协议,我也是初次学习,先贴上我的学习笔记 一 ...

  10. 【Zookeeper】本地ZK的搭建

    很久没有写了..最近看书的笔记都记在有道云上面..框架的使用觉得还是有必要写一下 1.下载 官网:https://www.apache.org/dyn/closer.cgi 清华镜像:https:// ...