DOM基础知识(Node对象、Element对象)
5、Node对象
u 遍历节点
u 父节点
.parentNode - 获取父节点—> 元素节点或文档节点
.parentElement - 获取父元素节点—> 元素节点
u 子节点
.childNodes – 获取所有子节点;
.firstChild – 获取第一个子节点; .lastChild – 获取最后一个子节点
u 兄弟节点
.previousSibling - 上一个兄弟节点; .nextSibling - 下一个兄弟节点
L 空白节点问题:

概念:空白节点,实际上就是一个空的文本节点
原因: 编写HTML代码时,输入换行符,浏览器解析HTML页面为DOM结构时,自动添加空白节点 ---获取子节点及兄弟节点的属性不能正常使用
注:IE8及以下版本的浏览器不存在空白节点问题
- 解决方案
1. 弃用获取子节点和兄弟节点的属性;改用getElementsByTagName( ) 方法
从父级根据标签名得到所有子级,选[0]; 自动把空白节点去掉
- 使用原本的子节点属性,人为进行判断,进行重构
- 封装方法:

l 插入节点
父.appendChild(子)
作用:将child节点插入到parent父节点的子节点列表的最后面
父.insertBefore(new子,current子)
作用:将newChild插入到parent父节点下currentChild子节点的前面
注意 - 没有insertAfter( )方法
- 自定义---- insertAfter(newChild, currentChild) 方法

function insertAfter(parent, newChild, currentChild){
var next = currentChild.nextSibling;
if(next.nodeType == 3){
next = next.nextSibling;
}
Parent.insertBefore(newChild,next);}
如果调用该方法时,目标节点为 null 值或不存在的话;等价于调用 appendChild( ) 方法
}
l 删除节点 – 父.removeChild(子)
l 替换节点 –父.replaceChild(newChild,oldChild)
newChild - 创建新的,从页面获取; parent和oldChild之间必须是父子关系
u 复制节点 - .cloneNode(boolean)
boolean类型的参数:是否复制后代节点 true:表示赋值; false:(默认值)表示不复制
* 返回值 - 表示被复制新的节点
注:如果复制的节点具有id属性的话,在复制完成之后,修改id属性值
6、Element对象
u 概念:

* 使用<节点>概念解析HTML
被解析为元素节点、属性节点和文本节点;三者相互独立(文本、元素节点是父子关系)
* 使用<元素>概念解析HTML
被解析为元素,属性和文本是元素的一部分
注:元素节点和元素都代表HTML页面中的标签
DOM查询的六个方法返回的既是元素节点(Node对象),又是元素(Element对象)
u 遍历元素
² 获取父元素
.parentElement
² 获取子元素
.children 获取所有子元素的集合
.firstElementChild获取第一个子元素 .lastElementChild获取最后一个子元素
² 获取兄弟元素
.previousElementSibling 获取指定节点的前一个兄弟节点。
.nextElementSibling 获取指定节点的后一个兄弟节点。
注:所有获取子元素和兄弟元素的属性,在 IE8及以下版本的浏览器不支持
* 人为提供浏览器的兼容解决方案
u 操作属性
² 获取属性 .getAttribute(属性名)
如果获取的属性名根本不存在,结果为null
如果属性名存在,返回属性的值,转换为boolean值 true
如果属性名不存在,返回null,转换为boolean值 false
² 设置属性 .setAttribute(属性名, 属性值)
如果属性名已存在的话 - 修改指定属性名的值
如果属性名不存在的话 - 新增属性(同时设置属性名和属性值) */
² 删除属性 .removeAttribute(属性名)
效果: 将属性名和属性值一并删除
² 判断是否含有属性 .hasAttribute(属性名) 有----true; 没有----false
* hasAttribute( )方法:
属于Element对象; 作用:判断指定标签是否含有【指定属性】
* hasAttributes( )方法:
属于Node对象;作用:判断指定标签是否包含属性
l 文本操作
- Ø 通过Node 对象的节点方式进行操作
* 文本节点一定是元素节点的子节点 - 获取指定的文本节点
* 通过 nodeValue 属性可以获取或设置文本节点的文本内容
利用 Node 方式操作文本(文本节点)
* 通过获取子节点的方式得到文本节点
* 通过 appendChild() 方法添加文本节点
* 通过 removeChild() 方法删除文本节点
文本节点的节点图

文本节点具有 nodeName、nodeType和nodeValue
nodeType - 用于判断当前是否是文本节点(3)
nodeValue - 用于获取或设置文本节点的文本内
【当元素节点的子节点为文本节点时; 不存在空白节点的问题】
- Ø textContent 属性
作用:获取指定元素中所有的文本内容(包含所有后代节点的文本内容);
【注:不支持IE8及以下版本;结果不报错,为 undefined 转换为boolean类型 false】
- innerText属性
【支持IE8及以下版本浏览器[专有]属性; IE9以上及其他(Chrome和火狐)新版本都兼容
获取文本的兼容问题
function getText(elem){
var text;
if(elem.textContent){
text = elem.textContent;
}else{
text = elem.innerText;
}
return text;
}
- innerHTML属性
作用:获取或设置指定标签的所有HTML代码[有什么输出什么]
注意:使用innerHTML属性的安全性很低(可能接收一些恶意代码)
解决:使用innerHTML属性时,对应的值不能是用户输入内容
DOM基础知识(Node对象、Element对象)的更多相关文章
- HTML DOM基础知识
HTML DOM基础知识 一.什么是DOM? 1.HTML DOM 定义了访问和操作HTML文档的标准方法. 2.HTML DOM 把 HTML 文档呈现为带有元素.属性和文本的树结构(节点树). 3 ...
- C/C++基础知识总结——类与对象
1. 面向对象程序设计的特点 1.1 抽象 1.2 封装 1.3 继承 1.4 多态 (1) 分为:强制多态.重载多态.类型参数化多态.包含多态 (2) 强制多态:类型转换 重载多态: 类型参数化多态 ...
- JAVA核心技术I---JAVA基础知识(不可变对象和字符串)
一:不可变对象 不可变对象(Immutable Object) –一旦创建,这个对象(状态/值)不能被更改了–其内在的成员变量的值就不能修改了. –典型的不可变对象 • 八个基本型别的包装类的对象 • ...
- Js基础知识2-对象、对象属性全解
Object对象 Object对象包含如下属性和方法,也就意味着一切对象(函数也是对象)都包含如下方法. 每种方法和属性在不同的对象中有不同的作用,并不是每种对象都有使用每个方法的必要. 下面是Obj ...
- DOM基础知识(概念、节点树、事件、Document)
1. DOM概念 全称为 Document Object Model,译为文档对象模型 D:文档 - DOM将HTML页面解析为一个文档 —> document对象 O:对象 - DOM将H ...
- DOM中的node与element的区别
先看document的两个常见method. document.createTextNode Constructor: Text document.createElement Constructor: ...
- 工作随笔—Java容器基础知识分享(持有对象)
1. 概述 通常,程序总是运行时才知道的根据某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型,为解决这个普遍的编程问题:需要在任意时刻和任意位置创建任意数量的对象,所以,就 ...
- java 基础知识九 类与对象
java 基础知识九 类与对象 1.OO(Object–Oriented )面向对象,OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应 ...
- 《Java基础知识》Java多态对象的类型转换
这里所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象.当对不存在继承关系的对象进行强制类型转换时,java 运行时将抛出 java.lang.ClassCastException 异常. ...
随机推荐
- 改造PAXOS算法消灭活锁
分布式一致性协议的目的是确定一个不可变变量分布式存储的取值:通过对国内外一致性算法的研究成果和PAXOS协议活锁的分析,发现引入一个角色作为竞争时的代理提交者就可以解决活锁问题,从而在本文引入“代理提 ...
- jquery 星级评价插件jquery Raty的使用
需要引入的js <script type="text/javascript" src="<%=basePath%>resources/js/jquery ...
- (转)微服务架构 互联网保险O2O平台微服务架构设计
http://www.cnblogs.com/Leo_wl/p/5049722.html 微服务架构 互联网保险O2O平台微服务架构设计 关于架构,笔者认为并不是越复杂越好,而是相反,简单就是硬道理也 ...
- ZBrush看一个球体如何演变为头发
对于头发的制作,ZBrush®是多样的,前面的教程中也有讲解,可以用球体作为子工具,用不同笔刷进行雕刻:还可以使用Z球转网格的方式.今天小编讲述一种最简单的方法,使用球体演变头发,这样的创作手法更高效 ...
- 带你认识闻名遐迩的ZBrush
ZBrush®是一款数字雕刻和绘画软件,它以其强大的功能和直观的工作流程彻底改变了3D行业.ZBrush 4R8是目前最新版本,它秉持一贯的简洁界面风格,给如今的数字艺术工作者提供了世界领先的工具.它 ...
- xshell登录centos7很慢解决办法
使用xshell登录到centos系统虚拟机,可以登录上去,但是认证速度特别慢. 因为在登录时,需要反向解析dns,因此,修改linux配置文件,vi /etc/ssh/sshd_config,将其注 ...
- WIN7无法保存打印机设置错误0x000006d9处理办法(转载)
办公电脑安装了GHOST版WIN7操作系统,在设置打印机共享时,报(错误0x000006d9),无法设置打印机共享, 查看微软官方文档:说是停止或禁用了Windows防火墙服务,必须启用 Window ...
- LCA-倍增法(写给自己看)
LCA-倍增法 题目又做不下去来写题解了 算法思想 类似于ST表的思想维护dp[i][j]:节点i向上跳2^j高度的的节点 转移方程 \(dp[i][j]=dp[dp[i][j-1]][j-1]\)注 ...
- java.util.Date日期类通过java语句转换成Sql(这里测试用的是oracle)语句可直接插入(如:insert into)的日期类型
public void add(Emp emp) throws Exception{ QueryRunner runner = new QueryRunner(JdbcUtil.getDataSour ...
- Problem 6
Problem 6 # Problem_6.py """ The sum of the squares of the first ten natural numbers ...