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: ...
 
随机推荐
- 用Python语言开发VTK程序的步骤
			
在Windows环境下用Python语言开发VTK程序 1.安装Python集成开发环境IDLE:下载地址:https://www.python.org/downloads/ 2.然后到VTK官网下载 ...
 - openstack镜像制作centos7
			
1,找一台宿主机安装kvm并检查是否支持虚拟化,这里我用的是vmware来做宿主机 egrep '(vmx|svm)' /proc/cpuinfo 然后安装kvm: yum install epel- ...
 - mac 下 tomcat7的安装
			
1.到 apache官方主页 下载 tomcat7 版本的完整 tar.gz 安装包 解压拷贝到 /Library目录下,并命名为Tomcat. 2.修改目录权限,终端输入 sudo chmod ...
 - JSP:getOutputStream() has already been called for this response
			
JSP页面,用小脚本显示一张图片 <%@page import="java.io.OutputStream"%> <%@page import="jav ...
 - 用angular制作简单的选项卡
			
现在angular变得挺火热的,自己也去简单的学习了一下,学了几天下来觉得angular果然好用,但是现在只是停留在比较浅的层面上,要想学好angular还是得下一番功夫的.学了一点新知识就想和大家分 ...
 - SAS 分组与排序
			
SAS 分组与排序 SAS对数据集进行操作时,经常需要在SET.MERGE.MODIFY或 UPDATE语句中使用分组数据.使用分组数据最基本的方法是使用BY 语句,其基本形式如下: BY 变量列表; ...
 - Hibernate框架:CRM练习--保存客户
			
crm:customer ralation manager 客户关系管理系统 一.准备 1.创建web项目 2.导包 最终为: 3.引入静态页面 将文件复制放入项目的WebContent目录下面: 4 ...
 - 流量控制与RateLimiter
			
一背景 如何提高系统的稳定性,简单来说除了加机器外就是服务降级.限流.加机器就是常说的分布式,从整个架构的稳定性角度看,一般SOA每个接口的所能提供的单位时间服务能力是有上限.假如超过服务能力,一般会 ...
 - c语言构建哈希表
			
/*哈希查找 *哈希函数的构造方法常用的有5种.分别是: *数字分析法 *平方取中法 *分段叠加 *伪随机数 *除留取余法 *这里面除留取余法比较常用 *避免哈希冲突常用的方法有4种: *开放定址法( ...
 - scrum冲刺
			
小组第一次冲刺任务及其完成情况描述: 这次主要是先构建一个框架,然后就是完成首页的一些代码编写,能够基本实现首页的注册.登陆以及一些之后完成的内部构建. 在第一次冲刺任务中的收获和体会,以后如何改进的 ...