DOM基础之“寻找”子节点
今天学习了JS中的DOM的内容,虽然小菜的理解不深,但希望能够记录下来,慢慢一点一点的进步,有更深的理解了,再回来补充。
首先,关于DOM的概念:
1.概念:DOM = document(文档)Object(对象)Model(模型)
文档:就是我们所说的html的页面
对象:指的是html页面中的元素,也成为标签
文档对象模型:则是规定的一系列能够为了让我们用JS更好操作页面元素的标准
2.在DOM下把文档当作树状结构,同时定义了很多方法来操作树中的每一个分支元素(节点)
3.如何寻找子节点
要寻找元素的子节点的方法有很多,但大部分都具有兼容性问题额,以上图的ul、li为例讨论下面的方法
<ul id = "oUl">
<li>111</li>
<li>222</li>
<li>333</li>
<li>444</li>
</ul>
- childNodes 属性 ====> oUl.childNodes
可以用childNodes属性来找到ul下所有的子节点li(是节点列表集合,即能找到所有li),并且只能访问元素的直系子节点(如果li里面还有别的元素是无法访问到的)
注意:childNodes在标准浏览器下:
会包含元素节点+文本节点(空格、回车等),并且允许非法嵌套(如ul里有<p>也会选中); ==》宽容
在非标准的IE浏览器下:
只包含元素节点,并且不允许非法嵌套; =====》不够宽容
对于此类的兼容问题我是这样记得,标准浏览器比较宽容,所以它大方的把文本节点也给你算上了(虽然不一定是好事),并且就连不是自己的孩子,也当作自己的。哈哈
非标准的IE就不够宽容啦,不是我的我不要~
- firstChild 与 firstElementChild 属性 -------》寻找元素的第一个子节点 oUl.firstChild/firstElementChild
两者的区别:firstChild在标准浏览器下:元素节点+文本节点 =====》宽容
在非标准IE下: 元素节点 ====》不宽容
firstElementChild属性只在IE浏览器才拥有
解决兼容问题方法:
var oFirst = oUl.firstElementChild || oUl.firstChild ;
oFirst.style.background = 'red'; //这样无论是IE还是标准下都可以oul下的第一个子元素添加一个红色背景了
那么问题又来了,如果Ul下没有元素呢???? 我还不知道,望告知,或者我一会再去查。
- lastChild 与 lastElementChild 属性 -------》寻找元素的最后一个子节点 oUl.lastChild/lastElementChild
跟第一个的一样,lastChild在标准下宽容(文本+元素);非标准IE下不宽容(元素)
解决兼容:
var oLast = oUl.lastElementChild || oUl.lastChild ;
oLast.style.background = 'red';
-----------推荐使用寻找子节点的方法-------------------------------------
- children 属性 -------》寻找元素的所有子节点列表集合 oUl.children.length ==>得到li的个数
children 在标准浏览器下:元素节点+允许非法嵌套
在非标准IE下:元素节点 +不允许非法嵌套
-----------寻找兄弟节点的方法-------------------------------------
- nextSibling与nextElementSibling 属性 -------》寻找当前元素的下一个兄弟节点 oUl.oFirst.nextSibling/nextElementSibling
- previousSibling与previousElementSibling 属性 -------》寻找当前元素的上一个兄弟节点 oUl.oLast.previousSibling/previousElementSibling
DOM基础之“寻找”子节点的更多相关文章
- DOM的概念及子节点类型
前言 DOM的作用是将网页转为一个javascript对象,从而可以使用javascript对网页进行各种操作(比如增删内容).浏览器会根据DOM模型,将HTML文档解析成一系列的节点,再由这些节点组 ...
- DOM的概念及子节点类型【转】
前言 DOM的作用是将网页转为一个javascript对象,从而可以使用javascript对网页进行各种操作(比如增删内容).浏览器会根据DOM模型,将HTML文档解析成一系列的节点,再由这些节点组 ...
- 遍历DOM树,获取子节点
获取子节点的方法有: 方法 说明 children() 选取子节点,可以带过滤参数.但只能选择子节点,不能选择孙子节点. find() 选取子节点,可以带过滤参数.可以选择子节点及孙子节点 ...
- JS获取子节点、父节点和兄弟节点的方法实例总结
转自:https://www.jb51.net/article/143286.htm 本文实例讲述了JS获取子节点.父节点和兄弟节点的方法.分享给大家供大家参考,具体如下: 一.js获取子节点的方式 ...
- JS-DOM ~ 03. 子节点的操作、style.样式和属性、dom元素的创建方法及操作、14个例题、主要是利用js直接控制html属性
带有Element和不带的区别 a) 带Element的获取的是元素节点 b) 不带可能获取文本节点和属性节点 获取所以子节点 a) . childNodes b) . children ...
- 5月25日-js操作DOM遍历子节点
一.遍历节点 遍历子节点 children();//获取节点的所有直接子类 遍历同辈节点 next(); prev(); siblings();//所有同辈元素 *find(); 从后代元素中查找匹配 ...
- jQuery操作DOM基础 - 创建节点
案例:创建两个<li>元素节点,并且作为<ul>元素节点的子节点,添加到DOM树中 <!DOCTYPE html> <html lang="en&q ...
- JavaScript DOM查询,原生js实现元素子节点的获取
在网页网页开发中,经常会需要获取某个网页元素的子元素,然后对其进行事件绑定.或样式修改等行为.这些操作对于jquery来说很容易,但是对于原生js会稍微麻烦一些,这里将介绍四种方法获取元素的子元素(本 ...
- JavaScript的DOM编程--04--获取元素节点的子节点
获取元素节点的子节点(**只有元素节点才有子节点!!) 1). childNodes 属性获取全部的子节点, 但该方法不实用. 因为如果要获取指定的节点 的指定子节点的集合, 可以直接调用元素节点的 ...
随机推荐
- 多目标遗传算法 ------ NSGA-II (部分源码解析)README 算法的部分英文解释
This is the Readme file for NSGA-II code. About the Algorithm--------------------------------------- ...
- 新建PCH文件以及常用宏定义
$(SRCROOT)/项目名/pch文件名.pch //0-255的随机数 #define randint arc4random() % 256 //随机色 #define randColor [UI ...
- Solr4.8.0源码分析(12)之Lucene的索引文件(5)
Solr4.8.0源码分析(12)之Lucene的索引文件(5) 1. 存储域数据文件(.fdt和.fdx) Solr4.8.0里面使用的fdt和fdx的格式是lucene4.1的.为了提升压缩比,S ...
- 使用GetLogicalProcessorInformation获取逻辑处理器的详细信息(NUMA节点数、物理CPU数、CPU核心数、逻辑CPU数、各级Cache)
不过必须XP SP3以上才行.所有API大全: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363804(v=vs.85).a ...
- haskell入门
斯坦福公开课<编程范式>中介绍了Scheme(但是不仅仅是Scheme,它只是作为函数式语言的代表),最后一课介绍了Haskell... “Hello World!”是学习一门语言的魔咒 ...
- Notepad++去除代码行号的几种方法
Notepad++去除代码行号的几种方法 (转自:http://hi.baidu.com/beer_zh/item/e70119309ee587f2a8842892)问:在网页中复制代码时,常常遇到高 ...
- 【规律】【贪心】【数学】HDU 5573 Binary Tree
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5573 题目大意: 从1走到第k层,下一层的数是上一层的数*2或者*2+1,可以选择加上或者减去走的数 ...
- Silverlight 中 TreeView 的数据绑定
方法一:Silverlight使用XAML标记语言来编写,如果不使用XAML强大的绑定功能,实在是罪过.通过使用绑定,可以将UI与视图模型层分离,有利于系统的维护.作为Silverlight中比较有代 ...
- java数组并集/交集/差集(补集)
1.说明 使用java容器类的性质选择容器 2.实现 package com.wish.datastrustudy; import java.util.HashSet; import java.uti ...
- HDU 5568 - BestCoder Round #63 - sequence2
题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=5568 题意 : 给一个长度已知的序列, 给一个值k, 问该序列中有多少种长度为k的上升子序列 思路 ...