Javascript高级编程学习笔记(37)—— DOM(3)Element
Element类型
除了Document类型之外,Element类型应该就是web编程中最常用的类型了
Element类型主要用于表现XML、HTML元素,提供对元素标签名、子节点以及特性的访问
特性
nodeType:1
nodeName:元素标签名
nodeValue:null
parentNode:Document、Element
tagName:用于访问元素的标签名(为了清晰,返回的值都是大写的标签名,在进行比较时需注意转换)
HTML元素
Html 元素都使用 HTMLElement 类型(或该类型的子类型)表示
HTMLElement 继承自 Element 类型
相较于Element类型,添加了以下属性
- id:元素在文档中的唯一标识符
- title:有关元素的附加说明,通常来说是光标移至该元素上提示条的内容
- lang:语言代码 通常来说很少使用
- dir:文本的显示方向 ‘ltr’ 从左至右 ‘rtl’ 从右至左
- className:与元素CSS指定的样式类名一致
以上属性都可以用于取得或修改相应的特性值,也就是说这些属性既可读又可写
并不是所有对元素特性的操作都会在页面上显示出来,上述属性中的id和lang属性的变动对用户来说就是透明的(在改变id不涉及样式修改的情况下)
对dir的修改会在语句执行完成的时候就完成样式的变动
之前提到了html元素都由HTMLElement类型以及其子类型来表示
HTMLElement的子类有:(下面只列举常用元素涉及的子类)
- HTMLAnchorElement <a>
- HTMLBodyElement <body>
- HTMLBRElement <br>
- HTMLButtonElement <button>
- HTMLHtmlElement <html>
- HTMLFormElement <form>
- HTMLDiveElement <div>
- HTMLHeadingElement <h1>~<h6>
- HTMLImageElement <image>
- HTMLInputElement <input>
- HTMLLabelElement <label>
- HTMLMetaElement <meta>
- HTMLPreElement <pre>
- HTMLSelectElement <select>
- HTMLStyleElement <style>
- HTMLTableElement <table>
- HTMLTableSectionElement <tbody>
- HTMLTableCellElement <td>
- HTMLTableRowElement <tr>
- HTMLUListElement <ul>
上面列举的都是比较常用的元素
这些元素在除了拥有 HTMLElement 的所有属性之外,还拥有许多自己的特性
后面的文章中会讨论其中的一部分元素
PS.关于属性以及的特性的说明
特性操作
这里我们所说的特性在上图中已经进行了说明,若仍有疑惑欢迎留言,但在后续文章不再解释
为了操作元素的特性,DOM为我们提供了以下三个方法
- Element.getAttribute('特性名称') //用于获取元素特性,传入要获取的元素特性的字符串,需要注意元素属性与元素特性的区别,如属性为 className 而与之对应的特性为 class,可以获取自定义的特性
- 每个非自定义的特性在DOM对象上都有着与之对应的属性
- 自定义特性虽然可以通过上述方法获取,但是在DOM对象上并不会有与之对应的属性(IE会自动创建)
- style特性在通过方法访问和通过DOM对象的属性访问时会存在区别:
- 通过方法访问返回CSS文本
- 通过属性访问返回一个style对象
- onclick特性也存在如下差异:
- 通过方法访问返回事件处理程序的代码字符串
- 通过属性访问返回一个事件处理程序(函数)
- 由于上述差异的存在所以在实践中getAttribute通常只用于自定义特性的相关操作
- Element.setAttribute('要设置的特性名称',‘要设置的值’)
- 如果该特性存在,则用第二个参数替换该特性的值,若该特性不存在,则用第二个参数创建该特性
- 通过该方法设置的特性名会被转为小写
- Element.removeAttribute('特性名称') 用于彻底删除元素的特性,并不仅仅是删除值
attributes属性
Element类型是唯一一个拥有attribute属性的DOM节点类型
该属性包含一个 NamedNodeMap 该集合与 nodeList 类似,是一个动态的集合
该集合中的每一个元素都是一个 attr 节点
该集合有以下方法
- getNamedItem('节点名称') 返回nodeName为传入参数的节点
- removeNamedItem('节点名称') 从集合中移除nodeName为传入参数的节点
- setNamedItme(attr节点) 向集合中添加一个attr节点,并以该节点的nodeName作为该节点的索引
- item(索引) 返回位于索引处的节点
如获取元素的ID
var id = element.attributes.getNamedItem('id').nodeValue
attributes提供的方法和之前的特性操作等方法没有什么区别
只有removeNamedItem 会返回attr节点,而removeAttribute则不会返回被删除的特性这一点区别
由于attributes提供的方法不够便利所以开发过程中我们更多的时候会使用之前的方法
但是当我们需要遍历元素的特性的时候attributes就能派上用场
以现在流行的MVVM框架VUE为例,如果我们希望自己实现一个类似的框架,那么遍历元素上的指令等操作说白了就是遍历元素的特性
这个时候也就需要用到attributes了
创建元素
使用 document.createElement() 方法则可以创建元素
需要传入创建的元素的标签名,在HTML中该方法不区分大小写,而在XML文档中该方法则需要区分大小写
创建的元素的 ownerDocument 会指向该document对象
但该方法只是创建了元素,而我们还需要将该元素添加到文档树中才能让该元素呈现在页面上
一旦元素添加到文档树中浏览器会立即显示,此后对于该元素的修改都会即时地显示在页面上
元素子节点
元素可以有任意数目的子节点和后代节点
但是有一点需要注意
我们在编写页面时,为了代码的可读性,避免不了需要换行等操作
虽然浏览器并不会将换行显示在页面上,但是当我们对元素的子节点进行遍历的时候,换行符等就会作为文本节点存在于childNode集合中
所以如果我们使用原生的 childNode 来进行子元素的遍历,最好再遍历时判断一下子节点的类型
for (let i = 0,len = element.childNodes.length; i < len ; i++){
if(element.childNodes[i].nodeType === 1){
//执行某些操作
}
}
Javascript高级编程学习笔记(37)—— DOM(3)Element的更多相关文章
- Javascript高级编程学习笔记(49)—— DOM2和DOM3(1)DOM变化
DOM变化 我们知道DOM有许多的版本,其中DOM0和DOM2这两个级别以对事件的纳入标准而为人所知 但是呢,这里不讲事件,在后面会有专门和事件有关的部分作为详细讲解 这里就只讲一下DOM2和DOM3 ...
- Javascript高级编程学习笔记(35)—— DOM(1)节点
DOM JS由三部分组成 1.BOM 2.DOM 3.ECMAScript ES和BOM在前面的文章已经介绍过了 今天开始JS组成的最后一部分DOM(文档对象模型) 我们知道,JS中的这三个部分实际上 ...
- Javascript高级编程学习笔记(71)—— 模拟事件(1)DOM事件模拟
事件,指的是网页中某个特定的交互时刻 一般来说事件由浏览器厂商负责提供,一般由用户操作或者其它浏览器功能来触发 但是有一类特殊的事件,那就是由我们开发人员通过JS触发的事件 这些事件和浏览器创建的事件 ...
- Javascript高级编程学习笔记(45)——DOM 操作表格及DOM动态集合
操作DOM表格 早些时候,HTML 还是以表格布局为主, 所以DOM操作表格是比较重要的一点 但是现如今 有其它的选择,所以表格的操作也就慢慢地淡出了人们的视线 所以这里也就不过多去详细展开,这里也就 ...
- Javascript高级编程学习笔记(42)—— DOM(8)Attr类型
Attr类型 我们在之前的文章中提到了,元素有一个 attributes 属性 该属性保存了一个 NamedNodeMap 集合 该集合中的元素也就是今天我们所要记叙的 attr 类型 主要就是方便我 ...
- Javascript高级编程学习笔记(41)—— DOM(7)DocumentFragment类型
DocumentFragment类型 除开昨天我们了解的两种不常用的类型之外 今天我们要介绍的两种类型可以说使用频率不输于前面最常用的几种元素类型 首先就是DocumentFragment类型 有些小 ...
- Javascript高级编程学习笔记(40)—— DOM(6)CDATASection、DocumentType
CDATASection类型 CDATASection类型是只针对XML文档的类型 因为浏览器无法解析 在浏览器中创建CDATASection的函数也无法正常使用 该类型有以下属性 nodeType: ...
- Javascript高级编程学习笔记(39)—— DOM(5)Comment
Comment类型 顾名思义,comment类型指的就是注释节点在HTML文档中的类型 也就是说平时我们在代码中的注释,在HTML解析的时候也会被解析为一类节点 让我们可以根据这些节点进行一系列的操作 ...
- Javascript高级编程学习笔记(38)—— DOM(4)Text
Text类型 html页面中的纯文本内容就属于Text类型 纯文本内容可以包含转义后的html字符,但不能包括 html 代码 text类型具有以下属性.方法 nodeType:3 nodeName: ...
随机推荐
- xx星空面试题
一面 1.什么是多态 实现原理? 2.什么是重载?class加载原理? 3.常用设计模式,简单介绍 4.看过哪些java的书?android的书? 5.动态注册静态注册 优缺点?静态注册函数如何被调用 ...
- Centos7 出现Welcome to emergency mode!
做mount挂载时,修改了 /etc/fstab 文件,导致Centos7重启时出现如下图所示错误: Welcome to emergency mode! After logging in, typ ...
- c#跨线程访问的代码和窗体关闭退出死循环的代码
一:一段跨线程访问,给页面内的控件赋值的代码找了半天没找到,还得找了以前写的程序. 在这记下来吧 . 这是其他程序内可以跨线程访问的代码 . if (gridControl1.InvokeRequi ...
- Linux学习之编译安装apache
疯狂吐槽腾某云..编译安装apache折腾了一下午..还是我不太熟练. 首先要先准备好安装apache的三个依赖包以及apache包.(一定要准备好!!折腾了一下午的小白握拳!!) -rw-r--r- ...
- c#简单的数据库查询与绑定DataGridView。
1配置文件 (两种写法) <connectionStrings> <add name="connStr" connectionString="se ...
- 解决删除镜像时image is referenced in multiple repositories
1.查看镜像 docker images rt@:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hours ago MB f8ab12e0 ...
- go语言基本语法
一个例子总结go语言基本语法 demo.go package main import ( "fmt" ) //结构体 type PersonD struct ...
- Python之路(第三十四篇) 网络编程:验证客户端合法性
一.验证客户端合法性 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂,那么利用hmac+加盐的方式来实现. 客户端验证的总的思路是将服务端随机产生的指定位数的字节发送到客 ...
- eval函数的特点和作用
eval(): 作用:它的作用是把对应的字符串解析成js代码并运行(将json的字符串解析成为JSON对象): 特点:它是一个全局函数: 缺点:1>在该函数内部申明的变量都是全局变量,且申明的变 ...
- Java JSONArray for循环 remove成员的一个好算法
好久没写日志了,今天来写一个,JSONArry fro循环判断value,移除不需要的,不需再将JSONArry再次转换成 map或list. JSONArray移除成员只能通过for遍历取成员,判断 ...