一、节点的属性

  • 节点值页面中的所有内容,包括标签、属性、文本
  • 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. WUSTOJ 1315: 杜学霸和谭女神(Java)

    题目链接:

  2. TCP,SYN,FIN扫描

    1.TCP扫描相对来说是速度比较慢的一种,为什么会慢呢?因为这种方法在扫描的时候会从本地主机的一个端口向目标主机的一个端口发出一个连接请求报文段,而目标主机在收到这个这个请求报文后: 有回复: 若同意 ...

  3. TZOJ3133: 求对称点

    #include<stdio.h> int main() { double a,b,c,d,e,f,g,h,i; while(~scanf("%lf %lf %lf %lf %l ...

  4. 十分钟快速创建 Spring Cloud 项目

    一般来说,Intelij IDEA 可以通过 Maven Archetype 来快速生成Maven项目,其实 IDEA 集成了 Spring 官方提供的 Spring Initializr,可以非常方 ...

  5. .NetCore/ .NetFramework 机制

    1.每来一个请求,会启动一个线程. 可以通过下面代码打印出来. 这个线程是主线程,如果用异步,会等待异步线程执行完毕才会返回. 这有个现象,用stmp 发邮件的时候,即使用异步,也会比较卡(选用的邮件 ...

  6. C#正则表达式根据分组命名取值

    string[] regexList = new string[] { @"^(?<TickerPart1>[0-9A-Z])[ 0_]?(?<TickerPart2> ...

  7. Pytorch 1.0升级到Pytorch 1.1.0

    Pytorch 1.0Pytorch 1.0于2018-12-8发布,详见https://github.com/pytorch/pytorch/releases/tag/v1.0.0 主要更新JIT全 ...

  8. select加锁分析(Mysql)

    [原创]惊!史上最全的select加锁分析(Mysql) 前言 大家在面试中有没遇到面试官问你下面六句Sql的区别呢 select * from table where id = ? select * ...

  9. string 数组转 int 数组

    用法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //字符串数组(源数组) string[] sNums = new[] {"1", "2" ...

  10. 【Linux】修改CentOS7启动方式

    ## 查看当前系统的默认启动方式: systemctl get-default ## 查看如下文件 cat /etc/inittab 可以看到 此文件中提示了如何进行修改默认的启动方式 ## 命令行启 ...