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: ...
随机推荐
- 面向对象的 __slots__
优点: 1. __slots__ 能够减小内存的占用,限制对象只能有这几个属性,再加属性会报错 . 副作用: 1. 设置了__slots__之后,实例对象就没有__dict__了 2. __slots ...
- Matting任务里的Gradient与Connectivity指标
Matting任务里的Gradient与Connectivity指标 主要背景 Matting任务就是把α(不透明度, 也就是像素属于前景的概率).F(前景色)和B(背景色)三个变量给解出来. C为图 ...
- 用Java代码通过JDBC连接Hiveserver2
1.在终端启动hiveserver2#hiveserver2 2.使用beeline连接hive另外打开一个终端,输入如下命令(xavierdb必须是已经存在的数据库)#beeline -u jdbc ...
- 201771010134杨其菊《面向对象程序设计(java)》第十三周学习总结
第十三周学习总结 第一部分:理论知识 第11章 事件处理(事件处理基础; 动作; 鼠标事件;AWT事件继承层次) 1. 事件源(event source):能够产生事件的对象都可 以成为事件源,如文本 ...
- HTML与盒模型
EC前端 - HTML教程 HTML与盒模型 HTML结构 <!doctype html> <html> <head> <meta charset=" ...
- Finance财务软件(自定义报表专题)
我们可以通过存储过程自定义报表 1.在菜单中新增报表菜单,这里的代码约束为报表对应存储过程名称,配置完成成后重启客户端生效 2.在自定义模板中适配存储过程入参,这里的功能键值为存储过程名称,字段键值与 ...
- PAT A1010.Radix 二分法
PAT A1010.Radix 链接: https://pintia.cn/problem-sets/994805342720868352/problems/994805507225665536 算法 ...
- Clinet/Server在工作线程中刷新页面数据的方法
Worker线程不能修改UI线程的状态(比如文本框里面的内容).解决的办法是写一个用来更新文本框内容的函数,然后在Worker线程里面通过BeginInvoke来利用delegate调用这个函数更新文 ...
- java39
String a= "hello.a.java;b.java;hello.java;hello.toha;"; //将每个分号的内容取出来 String[] res=a.split ...
- MySQL数据库学习书单/书籍
MySQL数据库学习书单 1.MySQL必知必会(MySQL Crash Course) 豆瓣详情 主要适合前期掌握MySQL,豆瓣评分8.4. 2.高性能MySQL 豆瓣详情 主要适合进阶阅读使 ...