js学习总结:DOM节点一(选择器,节点类型)
DOM:document object model 文档对象模型
DOM就是整个HTML文档的关系图谱(代表整个HTML文档),可以理解为下图:
一、查看元素节点
1.document.getElementById('元素id') 获取的类型:元素对象;
兼容性:a.IE6、7,会把表单元素input的name属性当做ID来使用;
b.IE8以下的浏览器,不区分id大小写
注意事项:
a.没有获取到元素返回null
b.后端抽取会改变id名称,实际开发不使用id选择器来操作元素节点
2.document.getElementsByTagName('元素标签名') 获取的类型:元素对象类数组
使用:可以通过限定查找范围来获取元素列表。context.getElementByTagName('元素标签名')
3.context.getElementsByName(‘name属性’) 获取的类型:元素对象类数组
兼容性:IE浏览器下只由表单元素和部分元素有效(表单、表单元素、img、iframe),且老版本浏览器不支持。
4.context.getElementsByCalssName('类名的值') 获取的类型:元素对象类数组
兼容性:IE6~8不支持
5.document.querySelector('css选择器') 获取的类型:元素对象类数组
兼容性:IE6、7没有这个方法
6.document.querySelectorAll('css选择器') 获取的类型:元素对象类数组
兼容性:同上。
注意:不是时时的元素节点,删除添加标签都不被检测
在众多原生DOM选择中,似乎每个都存在缺陷,综合考虑最合适被应用到实际开发中的选择器就是getElementByClassName();但由于IE6~8不兼容,所以需要做一些兼容处理,下面是兼容处理的代码:
function getElementsByClass(className,context){
context = context || document;
//把传递进来的样式类名的首尾空格先去掉,然后在按照中间的空格把里面的每一项拆分成数组
var classNameAry = className.replace(/(^ +| +$)/g,"").split(/ +/g); //获取指定上下文中的所有的元素标签,循环这些标签,获取每一个标签的className样式类名的字符串
var ary = [];
var nodeList = context.getElementsByTagName("*");
for(var i = 0,len=nodeList.length;i<len;i++){
var curNode = nodeList[i];
//判断curNode.className是否包含classNameAry里面的样式值 //
var isOk = true;//我们假设curNode
for(var k = 0;k<classNameAry.length;k++){
var curName = classNameAry[k];
var reg = new RegExp("(^| +)"+curName+"( +|$)");
if(!reg.test(curNode.className)){
isOk = false;
break;
}
}
if(isOk){//拿每一个标签分别和所有样式类名比较后,如果结果还是true的话,说明当前元素标签包含了所有的样式,也是我们想要的。
ary.push(curNode)
}
}
return ary;
}
二、节点树
node.parentNode | 返回元素的父节点对象;例如HTML元素的父节点是document | 节点对象 |
element.childNodes | 返回所有子节点对象列表 | 节点对象类数组 |
node.fistChild | 返回第一个子节点对象 | 节点对象 |
node.lastChild | 返回最后一个节点对象 | 节点对象 |
node.nextStibling | 返回后一个兄弟节点对象 | 节点对象 |
node.previousSibling | 返回前一个兄弟节点对象 | 节点对象 |
注意:以上方法都是基于节点查询,会将所有节点类的节点型访问出来,不会区分元素节点。(查询元素节点可以参考下一个知识点“遍历元素节点树”)
三、遍历元素节点树
element.parentElement | 返回当前节点的父节点元素对象(IE9以下不兼容) | 元素节点对象 |
element.children | 返回当前节点的元素子节点对象列表(IE9以下不兼容) | 元素节点对象类数组 |
element.childElementCount | 返回当前节点的元素子节点的个数同等于node.children.length | number |
element.firstElementChild | 返回当前节点的第一个元素子节点对象(IE9以下不兼容) | 元素节点对象 |
element.lastElementChild | 返回当前节点的最后一个元素子节点对象(IE9以下不兼容) | 元素节点对象 |
element.nextElmentSibling | 返回当前节点的前一个元素节点对象(IE9以下不兼容) | 元素节点对象 |
element.previousElementSibling | 返回当前节点的后一个元素节点对象(IE9以下不兼容) | 元素节点对象 |
四、节点类型及节点属性
类型名称 | nodeName | nodeValue | nodeType | attributes |
元素节点 | 大写的标签名(字符串类型) | null | 1 | 元素节点的属性集合 |
属性节点 | .... | .... | 2 | ..... |
文本节点 | "#text" | 标签符号间的文本(带Tab) | 3 | undefined |
注释节点 | "#comment" | 注释文本 | 8 | undefined |
document | "#document" | null | 9 | undefined |
documentFragment | 11 |
注意:
a)documentFragment——文档片段对象
b) 属性节点从文档树形逻辑来说不能与其他节点一起放到这里,被放到这里的原因主要是因为展示nodeType属性。
到这里可能你还不明白属性节点是什么?
从document文本结构来说,属性节点是元素节点的子节点,该节点的内容就是所在元素的所有属性的节点集合。请看示例代码:
<div class="div1" id="div1" style="color:blue;text-align:center"> </div>
<script type="text/javascript">
var div = document.getElementsByTagName("div")[0];
var atts = div.attributes;
console.log(atts);
</srcipt>
在来看看打印的结果
从打印结果来看,元素节点的attributes属性获取了元素所有的属性列表,并以类数组的方式保存。
属性节点上同样存在nodeName、nodeType、nodeValue等属性。
五、封装自己的元素子节点集合
由于element.children子元素节点列表属性的兼容性非常不好(IE9以下都不兼容),所以建议封装一个自己的获取元素子节点集合的方法,下面是封装代码。
function retElementChild(node){
var temp = {
length : 0,
push : Array.prototype.push,
splice : Array.prototype.splice
},
child = node.childNodes,
len = child.length;
for (var i = 0; i < len; i++) {
if (child[i].nodeType === 1) {
temp.push(child[i]);
}
}
return temp;
}
js学习总结:DOM节点一(选择器,节点类型)的更多相关文章
- JS学习之DOM节点的关系属性封装、克隆节点、Dom中Style常用的一些属性等小结
JS DOM节点: 在JS DOM中节点的关系被定义为节点的属性: 通常有以下几种节点之间的关系: (这里的关系是所有浏览器都支持的) parentNode 父节点 childNodes ...
- js学习笔记--dom部分(一)
js 学习整理之Dom部分 前面我总结了我最近学习js基础部分,当时提到过js分了三大部分,第一部分ECMA基础也就是第一次写的基础部分, 第二部分也就是DOM部分,也就是这里要写的内容的,然后第三部 ...
- js学习笔记14----DOM概念及子节点类型
1.概念 DOM:Document Object Model---文档对象模型 文档:html页面 文档对象:页面中的元素 文档对象模型:是一种定义,为了能够让程序(js)去操作页面中的元素. DOM ...
- 原生js学习 选择dom
连bootstrap5 都抛弃jquery了,重新使用原生js来写,所以最近在学习原生js. 一.选择dom元素: id let sure=document.getElementById('sure' ...
- 用vue.js学习es6(四):Symbol类型
一.Symbol类型: 1.ES6引入了一种新的原始数据类型Symbol,表示独一无二的值.它是JavaScript语言的第七种数据类型,前六种是:Undefined.Null. 布尔值(Boolea ...
- js学习总结:DOM节点二(dom基本操作)
一.DOM继承树 DOM——Document Object Model DOM定义了表示修改文档所需要的方法.DOM对象即为宿主对象,由浏览器厂商定义,用来操作html和xml的一类厂商定义,也有人称 ...
- JS中的DOM— —节点以及操作
DOM操作在JS中可以说是非常常见了吧,很多网页的小功能的实现,比如一些元素的增删操作等都可以用JS来实现.那么在DOM中我们需要知道些什么才能完成一些功能的实现呢?今天这篇文章就先简单的带大家入一下 ...
- 原生js快速渲染dom节点
function renderDom(str){ var _div = document.createElement('div'); _div.innerHTML = str; var dom_tem ...
- Javascript高级编程学习笔记(35)—— DOM(1)节点
DOM JS由三部分组成 1.BOM 2.DOM 3.ECMAScript ES和BOM在前面的文章已经介绍过了 今天开始JS组成的最后一部分DOM(文档对象模型) 我们知道,JS中的这三个部分实际上 ...
随机推荐
- 【BZOJ1580】【USACO2009Hol】杀手游戏 计算几何
题目描述 一个平面上有很多个点在运动.给你每个点的初始坐标和每个点的速度,求出最多有多少个点到\(0\)号店的距离同时不超过\(r\). \(n\leq 50000\) 题解 我们先把\(0\)号点平 ...
- 【BZOJ3132】【TYVJ1716】上帝造题的七分钟 二维树状数组
题目大意 维护一个\(n\times m\)的矩阵,有两种操作: \(1~x_1~y_1~x_2~y_2~v\):把\((a,b),(c,d)\)为顶点的矩形区域内的所有数字加上\(v\). \(2~ ...
- CODEFORCES掉RATING记 #1
时间:2017.7.16晚 比赛:Educational Codeforces Round 25 比赛开始前去睡觉了...开始后5min才起来 一进去就点开AB,B先加载好,就先做了B.读完题后发现是 ...
- 如何保证 spring-boot 和 spring-cloud版本一致
spring-boot 版本 和 spring-cloud版本是一一对应的,很多错误都是由于版本不一致导致的.很多百度的东西太老了, 版本一升级就会出错. spring的jar包依赖关系是最难的,但聪 ...
- 使用IDEA部署项目到远程服务器
1.选择Tools -> Deployment -> Configuration... 2.配置连接信息,Linux服务器一般都选择SFTP 3.配置本地上传文件路径.远程上传文件路径 4 ...
- 南理第八届校赛同步赛-C count_prime//容斥原理
大致思路就是先求出n的质因数假设是a1-an,然后在1-a的区间里面查找至少能整除{a1,a2...an}中一个元素的数有多少个,对1-b也做相同的处理,而找出来的元素肯定是与n不互质的,那么把区间的 ...
- 【HDU - 4349】Xiao Ming's Hope
BUPT2017 wintertraining(15) #8H 题意 求组合数C(n,i),i从0到n,里面有几个奇数. 题解 直接打表的话可能就直接发现规律了. 规律是n的二进制里有几个1,答案就是 ...
- NOIP2018联赛总结
NOIP2018联赛总结 Day 0 打了几个模板,看了一下别人的博客,背了一下vimrc Day 1 到了考场,先把vimrc配好 打开题目一先把三道题瞄了一眼,\(T1\)似乎是NOIP原题,\( ...
- A1106. Lowest Price in Supply Chain
A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...
- JavaScript深入之作用域链
前言 在 <javascript深入之执行上下文栈> 中讲到,当javascript代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution ...