回顾概念

文档: document
元素: 页面中所有的标签, 元素---element,  标签----元素---对象
节点: 页面中所有的内容(标签,属性,文本(文字,换行,空格,回车))----Node
根元素:html标签
 

需求---用之前学习的知识点能否解决?获取div中所有的标签,设置每个标签的背景颜色

节点---任意一个标签中的元素获取都非常的方便

 

节点的属性

可以使用标签--元素.出来
可以使用属性节点.出来
文本节点.点出来
 
节点的类型
nodeType: 节点的类型: 1----标签, 2---属性, 3---文本
nodeName: 节点的名字: 标签节点---大写的标签名字, 属性节点---小写的属性名字, 文本节点----#text
nodeValue: 节点的值: 标签节点---null, 属性节点---属性值, 文本节点---文本内容
 

 

获取相关的节点

获取父级节点和父级元素

.parentNode
.parentElement
 

获取相关的节点属性

.parentNode.nodeType   // 1  --------标签
.parentNode.nodeName  // DIV-----大写的标签名字
.parentNode.nodeValue  // null------标签
 
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>title</title> </head>
<body>
<div id="dv">
<span>这是div中的第一个span标签</span>
<p>这是div中的第二个元素,第一个p标签</p>
<ul id="uu">
<li>乔峰</li>
<li>鹿茸</li>
<li id="three">段誉</li>
<li>卡卡西</li>
<li>雏田</li>
</ul>
</div> <script src="common.js"></script>
<script> var ulObj=my$("uu");
console.log(ulObj.parentNode);//div
console.log(ulObj.parentNode.parentNode);//body
console.log(ulObj.parentNode.parentNode.parentNode);//html
console.log(ulObj.parentNode.parentNode.parentNode.parentNode);//document
console.log(ulObj.parentNode.parentNode.parentNode.parentNode.parentNode);//null // //ul标签的父级节点
// console.log(ulObj.parentNode);
// //ul标签的父级元素
// console.log(ulObj.parentElement);
//
// console.log(ulObj.parentNode.nodeType);//标签的---1
// console.log(ulObj.parentNode.nodeName);//标签---大写的标签名字
// console.log(ulObj.parentNode.nodeValue);//标签---null </script>
</body>
</html>

获取子节点和子元素

.childNodes // 7个

.children  //3个

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>title</title> </head> <body>
<div id="dv">哦哦
<span>这是div中的第一个span标签</span>
<p>这是div中的第二个元素,第一个p标签</p>
<ul id="uu">
<li>乔峰</li>
<li>鹿茸</li>
<li id="three">段誉</li>
<li>卡卡西</li>
<li>雏田</li>
</ul>
</div> <script src="common.js"></script>
<script>
//div
var dvObj = document.getElementById("dv");
//子节点
console.log(dvObj.childNodes);//7个子节点
//子元素
console.log(dvObj.children); //3
</script>
</body> </html>

获取里面的每个子节点

用for循环,长度是:.childNodes.length
 
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>title</title> </head> <body>
<div id="dv">哦哦
<span>这是div中的第一个span标签</span>
<p>这是div中的第二个元素,第一个p标签</p>
<ul id="uu">
<li>乔峰</li>
<li>鹿茸</li>
<li id="three">段誉</li>
<li>卡卡西</li>
<li>雏田</li>
</ul>
</div> <script src="common.js"></script>
<script>
//div
var dvObj = document.getElementById("dv");
//获取里面的每个子节点
for (var i = 0; i < dvObj.childNodes.length; i++) {
var node = dvObj.childNodes[i];
//nodeType--->节点的类型:1---标签,2---属性,3---文本
//nodeName--->节点的名字:大写的标签--标签,小写的属性名---属性,#text---文本
//nodeValue-->节点的值:标签---null,属性--属性的值,文本--文本内容
console.log(node.nodeType + "=====" + node.nodeName + "====" + node.nodeValue);
} </script>
</body> </html>

认识下即可:获取属性的节点

.getAttributeNode("id")

//2====id====dv

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>title</title> </head> <body>
<div id="dv">哦哦
<span>这是div中的第一个span标签</span>
<p>这是div中的第二个元素,第一个p标签</p>
<ul id="uu">
<li>乔峰</li>
<li>鹿茸</li>
<li id="three">段誉</li>
<li>卡卡西</li>
<li>雏田</li>
</ul>
</div> <script src="common.js"></script>
<script>
//div
var dvObj = document.getElementById("dv");
//获取的是属性的节点
var node = dvObj.getAttributeNode("id");
console.log(node.nodeType + "====" + node.nodeName + "====" + node.nodeValue);//2====id====dv </script>
</body> </html>

12行代码:都是获取节点和元素的

前4个没有兼容问题

后面8个有

<body>
<div id="dv">哦哦
<span>这是div中的第一个span标签</span>
<p>这是div中的第二个元素,第一个p标签</p>
<ul id="uu">
<li>乔峰</li>
<li>鹿茸</li>
<li id="three">段誉</li>
<li>卡卡西</li>
<li>雏田</li>
</ul>
</div>
<script src="common.js"></script>
<script> //12行代码:都是获取节点和元素的
//ul
var ulObj=document.getElementById("uu");
//父级节点
console.log(ulObj.parentNode);
//父级元素
console.log(ulObj.parentElement);
//子节点
console.log(ulObj.childNodes);
//子元素
console.log(ulObj.children);  //我是分割线//
//第一个子节点
console.log(ulObj.firstChild);//------------------------IE8中是第一个子元素
//第一个子元素
console.log(ulObj.firstElementChild);//-----------------IE8中不支持
//最后一个子节点
console.log(ulObj.lastChild);//------------------------IE8中是第一个子元素
//最后一个子元素
console.log(ulObj.lastElementChild);//-----------------IE8中不支持
//某个元素的前一个兄弟节点
console.log(my$("three").previousSibling);
//某个元素的前一个兄弟元素
console.log(my$("three").previousElementSibling);
//某个元素的后一个兄弟节点
console.log(my$("three").nextSibling);
//某个元素的后一个兄弟元素
console.log(my$("three").nextElementSibling); </script>
</body>

总结获取节点:

凡是获取节点的代码在谷歌和火狐得到的都是相关的节点
凡是获取元素的代码在谷歌和火狐得到的都是相关的元素
从子节点和兄弟节点开始, 凡是获取节点的代码在IE8中得到的是元素;而获取元素的相关代码, 在IE8中得到的是undefined,iE中不支持

JS---DOM---节点的概念,属性,和获取相关的节点的更多相关文章

  1. JS获取包含当前节点本身的代码内容(outerHtml)

    原生JS DOM的内置属性 outerHTML 可用来获取当前节点的html代码(包含当前节点),且此属性可使用jQuery的prop()获取 <div id="demo-test-0 ...

  2. JS ——DOM,BOM(包含盒模型,动画)总结

    JS盒模型 content: 通过计算后样式获取padding + content: box.clientWidth | box.clientHeightborder + padding + cont ...

  3. [js]DOM 篇

    DOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”(Document Object Model).它的作用是将网页转为一个 JavaScript 对象,从而可以用脚本进行各种操作 ...

  4. javascript总结44: DOM对象的dataset属性方式

    1 DOM设置属性的特殊方式: DOM对象的dataset属性方式获取data-xxx方式定义的属性 由于我们经常需要在标签上自定义属性来存储数据或状态,但是如果用传统的方式操作起来比较繁琐,而且不熟 ...

  5. JS学习之DOM节点的关系属性封装、克隆节点、Dom中Style常用的一些属性等小结

    JS DOM节点: 在JS DOM中节点的关系被定义为节点的属性: 通常有以下几种节点之间的关系: (这里的关系是所有浏览器都支持的) parentNode    父节点 childNodes     ...

  6. JS DOM操作(创建、遍历、获取、操作、删除节点)

    创建节点 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="u ...

  7. 从零开始的全栈工程师——js篇2.17(属性和节点获取)

    DOM 一.节点树状图 Document>documentElement>body>tagname 二.常用的节点类型 元素节点(标签) 文本节点(文本节点) 属性节点(标签里的属性 ...

  8. js DOM 节点树 设置 style 样式属性

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. JS DOM属性,包括固有属性和自定义属性,以及属性获取、移除和设置

    属性分为固有属性property和自定义属性attribute 固有属性查看 固有属性可以通过ele.property 来获取,自定义属性不行 <!DOCTYPE html> <ht ...

随机推荐

  1. 基于webpack实现多html页面开发框架二 css打包、支持scss、文件分离

    本节主要介绍webpack打包的时候CSS的处理方式 一.解决什么问题      1.CSS打包      2.CSS处理浏览器兼容      3.SASS支持      4.CSS分离成单独的文件 ...

  2. Numpy的基础用法

    1.用Numpy创建数组 numpy.array(object):创建数组,与array.array(typecode[, initializer])不同,array.array()只能创建一维数组 ...

  3. 使用python实现http服务器

    主要使用python实现了一个http服务器.http服务器实现了用户的注册和登录的简单功能,当然还可以继续扩展. 数据的存储使用的是文件,有兴趣的话可以使用数据库进行存储.当然根据个人兴趣而定. 本 ...

  4. 3Sum Time Limit Exceeded HashMap 优化过程

    昨晚,在做leetcode上的3Sum题目时,感觉这道题目和2Sum很像,当时解决2Sum时,思路如下: 用HashMap的key存储 num[i],value存储下标 i,之后在遍历数组num时,判 ...

  5. SpringBoot-运行原理(四)

    1.自动配置 (1).pom.xml 在pom文件中 <parent> <groupId>org.springframework.boot</groupId> &l ...

  6. 关于maven-assembly-plugin插件打包,有部分无法打包的情况解决方法

    今天在使用maven-assembly-plugin 对生产者进行打包,然后在linux中发布时.将包打包之后,发现mybtis的xml无法识别,然后查看原因说是没有这个包,我当时就纳闷了,都是基操( ...

  7. Pyhton表白代码——浪漫圣诞节

    圣诞节即将到了,所以这回通过turtle模块来编写一个表白的小程序 开发时间:2019-12-15 开发工具:Sublime 开发模块:turtle 这里用到了turtle库的相关知识,如果不熟悉可以 ...

  8. imagenet-vgg-verydeep-19.mat格式详解

    .mat是matlab生成的文件.用matlab打开文件imagenet-vgg-verydeep-19.mat可以帮助理解其结构.matlab代码如下: a = open('D:\imagenet- ...

  9. Spring源码加载BeanDefinition过程

    本文主要讲解Spring加载xml配置文件的方式,跟踪加载BeanDefinition的全过程. 源码分析 源码的入口 ClassPathXmlApplicationContext构造函数 new C ...

  10. Vue如何实现数据响应的

    参考博客:https://medium.com/vue-mastery/the-best-explanation-of-javascript-reactivity-fea6112dd80d 翻译博客: ...