5、Node对象

u  遍历节点

u 父节点

.parentNode - 获取父节点—> 元素节点或文档节点

.parentElement - 获取父元素节点—> 元素节点

u    子节点

.childNodes – 获取所有子节点;

.firstChild – 获取第一个子节点;     .lastChild – 获取最后一个子节点

u    兄弟节点

.previousSibling - 上一个兄弟节点;    .nextSibling - 下一个兄弟节点

L 空白节点问题:

概念:空白节点,实际上就是一个空的文本节点

原因: 编写HTML代码时,输入换行符,浏览器解析HTML页面为DOM结构时,自动添加空白节点    ---获取子节点及兄弟节点的属性不能正常使用

注:IE8及以下版本的浏览器不存在空白节点问题

  • 解决方案

1. 弃用获取子节点和兄弟节点的属性;改用getElementsByTagName( ) 方法

从父级根据标签名得到所有子级,选[0];   自动把空白节点去掉

  1. 使用原本的子节点属性,人为进行判断,进行重构
  • 封装方法:

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对象)的更多相关文章

  1. HTML DOM基础知识

    HTML DOM基础知识 一.什么是DOM? 1.HTML DOM 定义了访问和操作HTML文档的标准方法. 2.HTML DOM 把 HTML 文档呈现为带有元素.属性和文本的树结构(节点树). 3 ...

  2. C/C++基础知识总结——类与对象

    1. 面向对象程序设计的特点 1.1 抽象 1.2 封装 1.3 继承 1.4 多态 (1) 分为:强制多态.重载多态.类型参数化多态.包含多态 (2) 强制多态:类型转换 重载多态: 类型参数化多态 ...

  3. JAVA核心技术I---JAVA基础知识(不可变对象和字符串)

    一:不可变对象 不可变对象(Immutable Object) –一旦创建,这个对象(状态/值)不能被更改了–其内在的成员变量的值就不能修改了. –典型的不可变对象 • 八个基本型别的包装类的对象 • ...

  4. Js基础知识2-对象、对象属性全解

    Object对象 Object对象包含如下属性和方法,也就意味着一切对象(函数也是对象)都包含如下方法. 每种方法和属性在不同的对象中有不同的作用,并不是每种对象都有使用每个方法的必要. 下面是Obj ...

  5. DOM基础知识(概念、节点树、事件、Document)

    1.   DOM概念 全称为 Document Object Model,译为文档对象模型 D:文档 - DOM将HTML页面解析为一个文档 —> document对象 O:对象 - DOM将H ...

  6. DOM中的node与element的区别

    先看document的两个常见method. document.createTextNode Constructor: Text document.createElement Constructor: ...

  7. 工作随笔—Java容器基础知识分享(持有对象)

    1. 概述 通常,程序总是运行时才知道的根据某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型,为解决这个普遍的编程问题:需要在任意时刻和任意位置创建任意数量的对象,所以,就 ...

  8. java 基础知识九 类与对象

    java  基础知识九  类与对象 1.OO(Object–Oriented )面向对象,OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应 ...

  9. 《Java基础知识》Java多态对象的类型转换

    这里所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象.当对不存在继承关系的对象进行强制类型转换时,java 运行时将抛出 java.lang.ClassCastException 异常. ...

随机推荐

  1. nyoj___大数阶乘

    http://acm.nyist.net/JudgeOnline/problem.php?pid=28 大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 我们都知 ...

  2. 避免关注底层硬件,Nvidia将机器学习与GPU绑定

    Nvidia释放的一组cuDNN的库,有效的实现了其与多种深度学习框架的整合.基于cuDNN,加速了代码的运行,同时让研究员避免去关心底层硬件性能. 关键字: 编程语言语音识别Nvidia 原文链接: ...

  3. ubuntu 搭建简易的https网站

    ubuntu 搭建简易的https网站 环境:ubuntu 12.04.5 openssl (1)创建一个ssl的保存路径 sudo mkdir /opt/nginx/ssl (2)生存密钥sudo ...

  4. 05《UML大战需求分析》之五

    调研需求的时候,用户会说这个软件要具备怎样的功能,能做什么事情等,这些是功能性的需求.部署图和构件图是用来描述软件架构的,但是我又怀疑软件需求调研也需要确定软件架构吗? 我阅读了一个例子,一个软件公司 ...

  5. Block Functionality

    Block Functionality A block is an anonymous inline collection of code that: Has a typed argument lis ...

  6. 基于Nginx服务的用户认证

    通过Nginx实现web页面的用户认证,用户名为:admin,密码为:654321 1.修改Nginx配置文件 # vim /usr/local/nginx/conf/nginx.conf ..... ...

  7. DB2解决死锁

    方法一.查看db2diag.log文件 找到DeadLock or Lock timeout搜索 死锁或锁超时信息db2 force application(句柄ID)直接结束进程即可. 方法二.DB ...

  8. vc++如何创建程序-构造函数

    如果给Animal带参,则提示没有缺省的构造函数了,缺省就是不带参数的 改进:从子类当中向基类传递代参的,这样他就会给Animal传递400,300 对一个常量来调用 #include<iost ...

  9. centos7.XXX配置python3环境

    众做周知,centos 是自带python2.7的.可是随着社会的进步,科技的发展,技术一步步更新换代,python2.7已经不足以满足项目的需求.这时候python3横空出世. 下面跟着我来一起实现 ...

  10. with as递归调用

    一.递归调用--在代码中偶尔看到以记之,便于下次学习 https://blog.csdn.net/johnf_nash/article/details/78681060 --查询节点及其下所有子节点 ...