一、节点层次

1.Node类型

if (someNode.nodeType == 1){  // 适用于所有浏览器
alert("Node is an element.");
}
  • Node.ELEMENT_NODE (1);
  • Node.ATTRIBUTE_NODE (2);
  • Node.TEXT_NODE (3);

nodeName 和 nodeValue 属性

在使用这两个值以前,最好是像下面这样先检测一下节点的类型。

if (someNode.nodeType == 1){
value = someNode.nodeName; // nodeName 的值是元素的标签名
// 对于元素节点,nodeName 中保存的始终都是元素的标签名,而 nodeValue 的值则始终为 null 。
}

节点关系

每个节点都有一个 childNodes 属性,其中保存着一个 NodeList 对象。

NodeList 是一种类数组对象,它实际上是基于 DOM 结构动态执行查询的结果。

// 转为数组
function convertToArray(nodes){
var array = null;
try {
array = Array.prototype.slice.call(nodes, 0);
} catch (ex) {
// IE8 及更早版本将 NodeList实现为一个 COM 对象
array = new Array();
for (var i=0, len=nodes.length; i < len; i++){
array.push(nodes[i]);
}
}
return array;
}
convertToArray(someNode.childNodes);
  • childNodes
  • parentNode
  • previousSibling
  • nextSibling
  • firstChild
  • lastChild
  • hasChildNode() // 在节点包含一或多个子节点的情况下返回 true
  • ownerDocument // 所有节点都有的属性,指向整个文档节点

操作节点

  • appendChild() // 如果节点已经是文档的一部分,则将该节点从原来的位置

    转移到末尾
  • insertBefore() // 如果参照节点是

    null ,则 insertBefore() 与 appendChild() 执行相同的操作
  • replaceChild()
  • removeChild()
  • cloneNode() // IE会复制JavaScript事件,最好先移除事件
  • normalize() // 处理文本节点,空则删,相邻则合并

3.Document类型

  • nodeType = 9
  • nodeName = '#document'
  • nodeValue = null
  • parentNode = null
  • ownerDocument = null

其子节点可能是一个 DocumentType (最多一个) 、 Element (最多一个) 、 ProcessingInstruction

或 Comment 。

文档的子节点

  • documentElement // 指向<html>
  • childNodes[0] // 指向<html>
  • body // 指向<body>
  • doctype // 指向<!DOCTYPE>,各浏览器支持不一致

文档信息

  • title // 中的文本
  • URL
  • referrer // 来源页面
  • domain

1 不能将这个属性设置为 URL 中不包含的域

// 假设页面来自 p2p.wrox.com 域
document.domain = "wrox.com"; // 成功
document.domain = "nczonline.net"; // 出错!

2 如果域名一开始是“松散的” (loose) ,那么不能将它再设

置为“紧绷的” (tight) 。

// 假设页面来自于 p2p.wrox.com 域
document.domain = "wrox.com"; //松散的(成功)
document.domain = "p2p.wrox.com"; //紧绷的(出错!)

3 设置为相同的值可用于 frame 跨域

查找元素

  • getElementById()
  • getElementsByTagName() // 返回 HTMLCollection 对象
  • getElementsByName() // 返回 HTMLCollection 对象

特殊集合 // 返回值与 HTMLCollection 对象类似

HTMLCollection对象

  • namedItem() // 通过元素的 name 属性取得集合中的项(只会取得第一项)
  • 我们可以向方括号中传入数值或字符串形式的索引值。在后台,对数

    值索引就会调用 item() ,而对字符串索引就会调用 namedItem() 。

DOM一致性检测

document.implementation.hasFeature('name', 'verson');

文档写入

// 直接写入文档末尾
document.write("<strong>" + (new Date()).toString() + "</strong>"); // 如果在文档加载结束后再调用 document.write() ,那么输出的内容将会重写整个页面
window.onload = function(){
document.write("Hello world!");
};
  • write() // 原样写入
  • writeIn() // 末尾添加换行符(\n)
  • open()
  • close() // 打开、关闭输出流,如页面加载期间用 write 和 writeIn 则无需打开关闭

3.Element类型

  • nodeType = 1
  • nodeName = tagName = 标签名
  • nodeValue = null

取得属性

  • getAttribute() // 可取得 data- 自定义属性。
  • 可以通过 DOM 对象的属性来取得非自定义属性。
  • IE 可以通过 DOM 对象属性取得自定义属性。

1 style

  • getAttribute() 访问返回CSS文本
  • DOM 对象属性访问返回对象

2 事件(onclick)

  • getAttribute() 访问返回字符串
  • DOM 对象属性访问返回函数

设置属性

  • setAttribute() // 可设置 data- 自定义属性
  • 可以通过 DOM 对象的属性来设置非自定义属性。
  • IE 可以通过 DOM 对象属性设置自定义属性。

删除属性

  • removeAttribute() // 彻底删除,包括属性和值

attributes属性

attributes 属性中每一个元素属性都由一个 Attr 节点表示,保存在一个 NamedNodeMap 对象中 ,NamedNodeMap 与 NodeList 类似。

节点属性

  • nodeName
  • nodeValue

遍历元素属性

function outputAttributes(element){
var pairs = new Array(),
attrName,
attrValue,
i,
len;
for (i=0, len=element.attributes.length; i < len; i++){
attrName = element.attributes[i].nodeName;
attrValue = element.attributes[i].nodeValue;
if (element.attribute[i].specified) {
pairs.push(attrName + "=\"" + attrValue + "\"");
}
}
return pairs.join(" ");
}

创建元素

var div = document.createElement("div");
// 在 IE 中可用以下方式
var div = document.createElement("<div id=\"myNewDiv\" class=\"box\"></div >");

DOM(JavaScript高程笔记)的更多相关文章

  1. JAVASCRIPT高程笔记-------第十章 DOM对象

    10.1.1 node类型 --除IE外 所有浏览器都可以访问到这个类型 :JS中所有的节点类型都继承自Node类型 nodeName 与nodeValue  如果是一个元素 那么nodeName中保 ...

  2. javaScript高程笔记--最佳实践

    1.可维护性 <1>什么是可维护的代码 (1)可理解性 (2)直观性 (3)可适应性 (4)可扩展性 (5)可调试性 <2>代码约定 (1)可读性---适当的进行注释[函数和方 ...

  3. JAVASCRIPT高程笔记-------JSON与AJAX

    json对象——语法 简单值:与JS相同语法,可以是字符串,数值,布尔值,null:但不支持undefined 对象: 复杂数据类型,表示一组有序的键值对,键值对的值可以是简单数据,也可以是复杂数据 ...

  4. JAVASCRIPT高程笔记-------第五章 引用类型

    一.Object类型 1.1创建方式 ①new关键字 : var person = new Oject(); ②给定直接量: var person = { name : "zhangsan& ...

  5. 函数表达式(JavaScript高程笔记)

    函数声明 特点:函数声明提升(执行代码之前解析器会先读取函数声明,并使其在执行任何代码之前可用,意味着可以把函数声明放在调用语句之后) function functionName(arg0,arg1) ...

  6. javascript高程笔记:逻辑与和逻辑或

    逻辑与和或 逻辑与 当 && 前后两个操作数都是布尔值,无可厚非,同时为true才为true.与其他强类型语言不同的是,javascript逻辑与前后的操作数可以应用于任何类型. 而且 ...

  7. javascript高程笔记-------第四章 变量、作用域和内存问题

    首先JavaScript中的变量分为基本类型和引用类型. 基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象. 1.参数传递 javascript中所有参数的传递都是值传 ...

  8. BOM(JavaScript高程笔记)

    再次编辑于20160115 一.window对象 双重角色 JS访问浏览器窗口的接口 ECAMAscript规定的Global对象 1.全局作用域 所有在全局作用域中声明的变量.函数都会变成windo ...

  9. JAVASCRIPT高程笔记-------第八章 浏览器BOM对象

    8.1 window对象--表示一个浏览器的实例 在全局作用域中声明的任何变量.函数都会变成window对象的属性和方法,与之直接定义window对象的属性的区别是   window.xxx 可以通过 ...

随机推荐

  1. 表单控件 css的三中引入方式css选择器

    1. 表单控件: 单选框 如果两个单选的name值一样,会产生互斥效果 <p> <!--单选框--> 男<input type="radio" nam ...

  2. python传输文件

    传输文件简单版 server端: import socket import struct import json import os share_dir = r'C:\py3Project\路飞\第三 ...

  3. redis哨兵集群环境搭建

    一.哨兵的介绍 哨兵(sentinal)是redis集群架构中非常重要的一个组件,主要功能如下: 集群监控,负责监控redis master和slave进程是否正常工作 消息通知,如果某个redis实 ...

  4. odoo开发笔记 -- 前台不同视图访问同一个模型

    看一下partner这个表, 客户和供应商,都用这个表,那怎么区分呢: 供应商: 客户 注意这两个里面用domain来进行区分:   <field name="domain" ...

  5. TFS2018环境搭建一硬件要求

    本文关于微软的团队协作工具TFS2018搭建 1.操作系统要求 TFS可以安装在Windows Server和Windows PC操作系统中,但是TFS2018和2018只支持64位操作系统中,早期的 ...

  6. spring 资源访问

    spring 资源访问 Resource resource=null; //访问网络资源 resource=new UrlResource("file:bool.xml"); // ...

  7. 牛客网Java刷题知识点float数据在内存中是怎么存储的

    不多说,直接上干货! float类型数字在计算机中用4个字节存储. 遵循IEEE-754格式标准: 一个浮点数有2部分组成:底数m和指数e (1)底数部分 使用二进制数来表示此浮点数的实际值 (2)指 ...

  8. 计数排序/Counting Sort

    计数排序的算法思想: 对于每一个元素x,只要确定了元素x有多少个比它小的元素,那么就可以知道其最终的位置. 记输入数组为A[n],存放最后排序输出的数组为B[n],提供临时存储空间的中间数组记为C[k ...

  9. vue传参页面刷新数据丢失问题

    在做vue的时候,经常会遇到组件之间数据的传递问题,通过params或者query传参,但是,当页面刷新的时候,数据会丢失,找不到数据.今天经过总结,解决了这个问题.通过了一下几种情况进行传值: 通过 ...

  10. 面试题----makefile文件的作用

    make工具和makefile文件 make工具和makefile文件简介 make命令和makefile文件的结合提供了一个在项目管理领域十分强大的工具.它不仅常被用于控制源代码的编译和链接,而且还 ...