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: ...
随机推荐
- windows 环境下 dbnamodb 环境搭建与使用
https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/installing.html 安装 AWS Command Line Interface ...
- Lonsdor K518ISE SCION 2011-2018 Models Enabled!
Lonsdor released the Lonsdor K518ISE Key Programmer update announcement on 14-03-2019, saying it can ...
- NOIP2018游记-退役之战
\(Day\ 0\) 从火车站下来坐地铁\(1\)小时,再乘公交车到酒店,还要帮队里一个断腿大佬搬东西,累死我了.. 到酒店就快\(5\)点了,想打个牌也没时间. 酒店的房间很不错,空间大又干净,后来 ...
- 【转载】http proxy原理
最近使用Charles抓https包时,发现get和post方式的请求都能抓到,但是method为connect的就是抓不到.而且提示如下: You may need to configure you ...
- windbg排查大内存
现在都是用windbg preview,安装比较麻烦了,还要配置环境变量, 并且每次分析前要先执行 !analyze - v !eeheap -gc !DumpHeap -min 500 000002 ...
- WCF系列_WCF如何选择不同的绑定
内容转载自<WCF核心技术> 开发者不用直接操作信道范型,而是由WCF根据服务OperationContract来选择合适的信道范型.大多数信道范型都有无会话两种变体.有会话信道会在客户端 ...
- eclipse 安装 maven
一共需要3个步骤,1 安装maven环境 2 安装eclipse的maven插件 3 配置eclipse的maven环境 1. 安装maven环境 1.1 下载 去网址http:// ...
- CodeForces - 939A,解题报告
题意:给出一个n个点有向图,问是否存在三个点,这三个点构成一个回路.n<=5000 模拟即可. 注意是必须三个点 多了居然不行. import java.util.*; public class ...
- ConcurrentDictionary
ConcurrentDictionary ConcurrentDictionary一大特点是线程安全,在没有ConcurrentDictionary前 在多线程下用Dictionary,不管读写都要加 ...
- go语言的条件语句和循环语句
一,条件语句 常见的就是if语句: 单支条件语句: if 条件 :执行语句 (注,如果是没有逻辑运算符连接的话,是可以不需要括号的,也可以加上括号,如:if (条件):执行语句) 双支 ...