DOM(JavaScript高程笔记)
一、节点层次
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高程笔记)的更多相关文章
- JAVASCRIPT高程笔记-------第十章 DOM对象
10.1.1 node类型 --除IE外 所有浏览器都可以访问到这个类型 :JS中所有的节点类型都继承自Node类型 nodeName 与nodeValue 如果是一个元素 那么nodeName中保 ...
- javaScript高程笔记--最佳实践
1.可维护性 <1>什么是可维护的代码 (1)可理解性 (2)直观性 (3)可适应性 (4)可扩展性 (5)可调试性 <2>代码约定 (1)可读性---适当的进行注释[函数和方 ...
- JAVASCRIPT高程笔记-------JSON与AJAX
json对象——语法 简单值:与JS相同语法,可以是字符串,数值,布尔值,null:但不支持undefined 对象: 复杂数据类型,表示一组有序的键值对,键值对的值可以是简单数据,也可以是复杂数据 ...
- JAVASCRIPT高程笔记-------第五章 引用类型
一.Object类型 1.1创建方式 ①new关键字 : var person = new Oject(); ②给定直接量: var person = { name : "zhangsan& ...
- 函数表达式(JavaScript高程笔记)
函数声明 特点:函数声明提升(执行代码之前解析器会先读取函数声明,并使其在执行任何代码之前可用,意味着可以把函数声明放在调用语句之后) function functionName(arg0,arg1) ...
- javascript高程笔记:逻辑与和逻辑或
逻辑与和或 逻辑与 当 && 前后两个操作数都是布尔值,无可厚非,同时为true才为true.与其他强类型语言不同的是,javascript逻辑与前后的操作数可以应用于任何类型. 而且 ...
- javascript高程笔记-------第四章 变量、作用域和内存问题
首先JavaScript中的变量分为基本类型和引用类型. 基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象. 1.参数传递 javascript中所有参数的传递都是值传 ...
- BOM(JavaScript高程笔记)
再次编辑于20160115 一.window对象 双重角色 JS访问浏览器窗口的接口 ECAMAscript规定的Global对象 1.全局作用域 所有在全局作用域中声明的变量.函数都会变成windo ...
- JAVASCRIPT高程笔记-------第八章 浏览器BOM对象
8.1 window对象--表示一个浏览器的实例 在全局作用域中声明的任何变量.函数都会变成window对象的属性和方法,与之直接定义window对象的属性的区别是 window.xxx 可以通过 ...
随机推荐
- [Leetcode]931.下降路径最小和
题目链接 这一题目首先需要弄懂题目的意思,下降路径最小和指的是在方阵中可以从上往下行走,走过后获得的值最小,方向可以是走左下,右下,直下. 题目和传统的动态规划一样,把边界的值先初始化,然后通过状态转 ...
- vue-cli项目配置文件分析
最近在vue-cli生成的webpack模板项目的基础上开发了一些项目,开发过程中遇到很多坑,并且需要改动build和config里面一些相关的配置,查阅,学习,总结,分享. 一.配置文件结构 本文主 ...
- android设备不识别awk命令,缺少busybox
android设备不识别awk命令,缺少busybox 一.什么是BusyBox ? BusyBox 是标准 Linux 工具的一个单个可执行实现.BusyBox 包含了一些简单的工具,例如 cat ...
- Celery -- 分布式任务队列 及实例
Celery 使用场景及实例 Celery介绍和基本使用 在项目中如何使用celery 启用多个workers Celery 定时任务 与django结合 通过django配置celery perio ...
- Python 模块 和 包
模块 os模块 路径拼接 os.path.join
- gitlab基本的命令
1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v 添加远程仓库:$ git ...
- flume常用组件
Flume组件 1. Source NetCat Source:绑定的端口(tcp.udp),将流经端口的每一个文本行数据作为Event输入: type:source的类型,必须是netcat. ...
- (转)Python自动化运维之13、异常处理及反射(__import__,getattr,hasattr,setattr)
原文:http://www.cnblogs.com/xiaozhiqi/p/5778856.html https://blog.csdn.net/zong596568821xp/article/det ...
- 全球各大邮件SMTP服务限制
常用免费SMTP服务的发送限制,转贴 GMail 免费邮箱 http://gmail.google.comSMTP 服务器:smtp.gmail.com策略:发送延时 0,每天发送量限制 50(GMa ...
- Quartz.NET基础知识概述
Quartz.NET是什么 由于我现在使用的Quartz.NET2.2版本,相对2.x变化不大,主要是相对于1.x更新了很多东西,如下基础知识摘录网络. Quartz.NET是一个开源的作业调度框架, ...