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的子类有:(下面只列举常用元素涉及的子类)

  1. HTMLAnchorElement    <a>
  2. HTMLBodyElement   <body>
  3. HTMLBRElement   <br>
  4. HTMLButtonElement   <button>
  5. HTMLHtmlElement   <html>
  6. HTMLFormElement   <form>
  7. HTMLDiveElement  <div>
  8. HTMLHeadingElement  <h1>~<h6>
  9. HTMLImageElement  <image>
  10. HTMLInputElement  <input>
  11. HTMLLabelElement   <label>
  12. HTMLMetaElement   <meta>
  13. HTMLPreElement   <pre>
  14. HTMLSelectElement   <select>
  15. HTMLStyleElement   <style>
  16. HTMLTableElement   <table>
  17. HTMLTableSectionElement  <tbody>
  18. HTMLTableCellElement  <td>
  19. HTMLTableRowElement  <tr>
  20. 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的更多相关文章

  1. Javascript高级编程学习笔记(49)—— DOM2和DOM3(1)DOM变化

    DOM变化 我们知道DOM有许多的版本,其中DOM0和DOM2这两个级别以对事件的纳入标准而为人所知 但是呢,这里不讲事件,在后面会有专门和事件有关的部分作为详细讲解 这里就只讲一下DOM2和DOM3 ...

  2. Javascript高级编程学习笔记(35)—— DOM(1)节点

    DOM JS由三部分组成 1.BOM 2.DOM 3.ECMAScript ES和BOM在前面的文章已经介绍过了 今天开始JS组成的最后一部分DOM(文档对象模型) 我们知道,JS中的这三个部分实际上 ...

  3. Javascript高级编程学习笔记(71)—— 模拟事件(1)DOM事件模拟

    事件,指的是网页中某个特定的交互时刻 一般来说事件由浏览器厂商负责提供,一般由用户操作或者其它浏览器功能来触发 但是有一类特殊的事件,那就是由我们开发人员通过JS触发的事件 这些事件和浏览器创建的事件 ...

  4. Javascript高级编程学习笔记(45)——DOM 操作表格及DOM动态集合

    操作DOM表格 早些时候,HTML 还是以表格布局为主, 所以DOM操作表格是比较重要的一点 但是现如今 有其它的选择,所以表格的操作也就慢慢地淡出了人们的视线 所以这里也就不过多去详细展开,这里也就 ...

  5. Javascript高级编程学习笔记(42)—— DOM(8)Attr类型

    Attr类型 我们在之前的文章中提到了,元素有一个 attributes 属性 该属性保存了一个 NamedNodeMap 集合 该集合中的元素也就是今天我们所要记叙的 attr 类型 主要就是方便我 ...

  6. Javascript高级编程学习笔记(41)—— DOM(7)DocumentFragment类型

    DocumentFragment类型 除开昨天我们了解的两种不常用的类型之外 今天我们要介绍的两种类型可以说使用频率不输于前面最常用的几种元素类型 首先就是DocumentFragment类型 有些小 ...

  7. Javascript高级编程学习笔记(40)—— DOM(6)CDATASection、DocumentType

    CDATASection类型 CDATASection类型是只针对XML文档的类型 因为浏览器无法解析 在浏览器中创建CDATASection的函数也无法正常使用 该类型有以下属性 nodeType: ...

  8. Javascript高级编程学习笔记(39)—— DOM(5)Comment

    Comment类型 顾名思义,comment类型指的就是注释节点在HTML文档中的类型 也就是说平时我们在代码中的注释,在HTML解析的时候也会被解析为一类节点 让我们可以根据这些节点进行一系列的操作 ...

  9. Javascript高级编程学习笔记(38)—— DOM(4)Text

    Text类型 html页面中的纯文本内容就属于Text类型 纯文本内容可以包含转义后的html字符,但不能包括 html 代码 text类型具有以下属性.方法 nodeType:3 nodeName: ...

随机推荐

  1. log4j2.xml日志文件设置文件路径

    笔者最近的项目里使用了spring,spring通过web.xml配置监听器,在web启动时web.root系统变量,以供其他变量使用,例如 在属性文件里使用${web.root}以取得完整路径,项目 ...

  2. c#跨线程访问的代码和窗体关闭退出死循环的代码

    一:一段跨线程访问,给页面内的控件赋值的代码找了半天没找到,还得找了以前写的程序. 在这记下来吧 .  这是其他程序内可以跨线程访问的代码 . if (gridControl1.InvokeRequi ...

  3. angular如何引入公共JS

    一.现象 在项目的开发中,总会用到一些公司的脚本方法,同时,不希望在每个页面用到时又得需要引用,有点麻烦. 二.解决 1.在src文件夹下新建文件夹 utils: 2.在utils下新建文件 comm ...

  4. jQuery的load函数是异步的

    今天使用load函数的时候,用它加载页面,再修改页面样式,但是没有成功,上网查了一下,原来是异步的,也就是说之后的代码不会等页面加载完再执行,有可能先执行,这就找不到元素了. 解决方法,利用load函 ...

  5. oracle12C安装步骤

    首先去官网下载两个架包链接如下:官网链接 第一步:将两个架包解压到同一个database目录下.如截图所示: 第二步:打开setup应用程序 打开后就到了下面这个页面 第三步:配置安全更新 环境变量配 ...

  6. node,Yeoman,Bower,Grunt的简介及安装

    作为前端,基本的html,css,js已经不太够用了,所以要学习一些前端自动化工具,来提高我们的生产力 1.NodeJS 先安装NodeJS,直接去官网,下载最新的版本,一定要最新的版本,这样会避免很 ...

  7. Laravel API Tutorial: How to Build and Test a RESTful API

    With the rise of mobile development and JavaScript frameworks, using a RESTful API is the best optio ...

  8. pclConfig.cmake or PCLConfig.cmake

    Could not find a package configuration file provided by "pcl" (requested  version 1.8) wit ...

  9. C# WPF 父控件通过使用可视化树找到子控件

    在我们使用WPF设计前台界面时,经常会重写数据模板,或者把控件放到数据模板里.但是一旦将控件放到数据模板中,在后台就没有办法通过控件的名字来获取它了,更没办法对它进行操作(例如,隐藏,改变控件的某个值 ...

  10. springboot 使用mysql(mybatis)

    添加mysql依赖项 <dependency>   <groupId>org.mybatis.spring.boot</groupId>   <artifac ...