[js]DOM 篇
- DOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”(Document Object Model)。它的作用是将网页转为一个 JavaScript 对象,从而可以用脚本进行各种操作
- 浏览器会根据 DOM 模型,将结构化文档(比如 HTML 和 XML)解析成一系列的节点,再由这些节点组成一个树状结构(DOM Tree)。所有的节点和最终的树状结构,都有规范的对外接口
一、节点
- DOM 的最小组成单位叫做节点(node)。文档的树形结构(DOM 树),就是由各种不同类型的节点组成。每个节点可以看作是文档树的一片叶子
- 浏览器提供一个原生的节点对象
Node,上面这七种节点都继承了Node,因此具有一些共同的属性和方法 Document:整个文档树的顶层节点DocumentType:doctype标签(比如<!DOCTYPE html>)Element:网页的各种HTML标签(比如<body>、<a>等)Attribute:网页元素的属性(比如class="right")Text:标签之间或标签包含的文本Comment:注释DocumentFragment:文档的片段
2、检测节点类型:node.nodeType
- 文档节点(document):9,对应常量
Node.DOCUMENT_NODE - 元素节点(element):1,对应常量
Node.ELEMENT_NODE - 属性节点(attr):2,对应常量
Node.ATTRIBUTE_NODE - 文本节点(text):3,对应常量
Node.TEXT_NODE - 文档片断节点(DocumentFragment):11,对应常量
Node.DOCUMENT_FRAGMENT_NODE - 文档类型节点(DocumentType):10,对应常量
Node.DOCUMENT_TYPE_NODE - 注释节点(Comment):8,对应常量
Node.COMMENT_NODE
3、node.nodeName属性返回节点的名称
- 文档节点(document):
#document - 元素节点(element):大写的标签名
- 属性节点(attr):属性的名称
- 文本节点(text):
#text - 文档片断节点(DocumentFragment):
#document-fragment - 文档类型节点(DocumentType):文档的类型
- 注释节点(Comment):
#comment
// HTML 代码如下
// <div id="d1">hello world</div>
var div = document.getElementById('d1');
div.nodeName // "DIV"
4、node.nodeValue属性返回一个字符串,表示当前节点本身的文本值,该属性可读写
只有文本节点(text)和注释节点(comment)有文本值,因此这两类节点的nodeValue可以返回结果,其他类型的节点一律返回null。同样的,也只有这两类节点可以设置nodeValue属性的值,其他类型的节点设置无效。
// HTML 代码如下
// <div id="d1">hello world</div>
var div = document.getElementById('d1');
div.nodeValue // null
div.firstChild.nodeValue // "hello world"
div是元素节点,nodeValue属性返回null。div.firstChild是文本节点,所以可以返回文本值。
5、Node.textContent属性返回当前节点和它的所有后代节点的文本内容。
二、使用DOM获取元素(Element对象)
1.通过名称类型访问节点
(1)getElementById();
(2)getElementsByTagName();
2.利用父子关系查询节点
(1).ChildNodes //获取全部子节点数组(在Firefox chrome ie9中会包含文本节点)
(2).children //只选择标签节点的子元素
(3).parentNode //父节点
(4).offsetNode //绝对定位的父节点
(5).hasChildnNodes() //判断是否有子节点 返回布尔值
(6).firstChild //第一个子节点 (在Firefox chrome ie9中会包含文本节点)
(7).lastChild //最后一个子节点 (在Firefox chrome ie9中会包含文本节点)
3.利用兄弟关系访问节点
(1).nextSibling
(2).previousSibling
兼容性:在Firefox、chrome等浏览器中会包含文本节点(空节点)
(兼容处理nextSibing)
function(node)
{
var tempLast=node.parentNode.lastChild;
if(node==tempLast)
return null;
var tempObj=node.nextbiSing;
while(tempObj.nodeType !=1 && tempObj!=tempLast)
tempObj=tempObj.nextSibling;
return (tempObj.nodeType==1)?tempObj;null;
}
三、获取节点属性
(1)gitAttribute(属性名); //获取属性值
(2)setAttribute(属性名,属性值); //设置属性值
(3)removeAttribute(属性名); //删除属性值
四、创建和添加节点
1、创建节点
(1)createElement("标签名");
(2)createTextNode("文本内容");
(3)createDocumentTragment();
2、添加节点
appendChild(nodename); //添加子节点//默认插入到末尾//动作删除创建位置,插入到新位置
3、删除节点
removeChild(nodename); //找的父元素删除。。。。 x.parentNode.removeChild(x);
4、替换节点
replaceChild(newNode,oldNode); //查找父元素替换。。。 x.parentNode.replaceChild(oNewP,oOldP);
5、在特定节点前插入
insertBefore(newNode,targetNode);
6、在特定节点后插入
function insertAfter(newElement,targetElement)
{
if(oParent.lastChild==targetElement)
oParent.appendChild(newElement);
else
oParent.insertBefore(newElement,targetElement.nextSibling);
}
[js]DOM 篇的更多相关文章
- 1. web前端开发分享-css,js入门篇
关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...
- web前端开发分享-css,js入门篇(转)
转自:http://www.cnblogs.com/jikey/p/3600308.html 关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人 ...
- 前端面试题目汇总摘录(JS 基础篇)
JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...
- web前端开发分享-css,js入门篇
学习没有捷径,但学习是有技巧与方法. 一,css入门篇: 推荐书籍:css哪些事儿,精通css. 理由:css那些事儿,他是一本介绍css基础类的书,是入门的经典读物. 系统的介绍了css的选 ...
- JS DOM操作(创建、遍历、获取、操作、删除节点)
创建节点 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="u ...
- JS创建对象篇
JS创建对象篇 Object构造函数创建 var person = new Object(); person.name = "Tom"; person.age = 10; pers ...
- 货架工程项目之js dom实现项目工程进度图
笔者最近要负责有个项目工程网站的安装进度过程,实现的效果要求大概如下图所示 由于笔者没有参与到数据库的制作,得知他们这个项目设计工序的时候就一个开始日期的和完成日期,连整个项目的安装结束时间都没有简直 ...
- js学习篇1--数组
javascript的数组可以包含各种类型的数据. 1. 数组的长度 ,直接用 length 属性; var arr=[1,2,3]; arr.length; js中,直接给数组的length赋值是会 ...
- 2. web前端开发分享-css,js进阶篇
一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无从下手 ...
随机推荐
- 针对用户在个人中心绑定手机认证的一些js代码。
需求: 1:手机号码校验(格式的校验,手机号码是否已经绑定过)---未实现 2:填完手机号码,点击发送验证码,手机会收到一条信息 3:发送验证码按钮不可用,变成重新发送的倒计时 1):60秒以后又可以 ...
- 基于Vue + Vuex + Vue-router + Webpack 2.0打造微信界面
一.项目简介 基于Vue + Vuex + Vue-router + Webpack 2.0打造微信界面,实现了微信聊天.搜索.点赞.通讯录(快速导航).个人中心.模拟对话.朋友圈.设置等功能. 二. ...
- 利用phpMyAdmin提权
利用phpMyAdmin提权 发表于 2016-03-31 | 分类于 phpMyAdmin | 暂无评论 | 9次阅读 爆路径 /phpmyadmin/libraries/lec ...
- 5 - django-csrf-session&cookie
目录 1 CSRF跨站请求伪造 1.1 CSRF攻击介绍及防御 1.2 防御CSRF攻击 1.2.1 验证 HTTP Referer 字段 1.2.2 在请求地址中添加 token 并验证 1.2.3 ...
- PCI学习之总线原理01
-----------以下资料由网络资料整理而成-------- PCI即Peripheral Component Interconnect,中文的意思是“外围器件互联”. PCI总线支持32位和64 ...
- linux中断申请之request_threaded_irq 【转】
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=21977330&id=3755609 在linux里,中断处理分 ...
- mysql备份参数--master-data和--dump-slave的介绍
[mysql@db2 ~]$ mysqldump -A --master-data=2 > master2.sql[mysql@db2 ~]$ mysqldump -A --master-dat ...
- codevs 1230 元素查找
题目链接:http://codevs.cn/problem/1230/ 题解: 会有很多方法写这道题,写个裸的哈希练练手 #include<cstdio> ,MOD=; int n,m,h ...
- Deploy Openstack all-in-one Shell Script
Deploy Openstack all-in-one Shell Script At present(2015/10), the RDO deploment method can only inst ...
- 转载: 开源整理:Android App新手指引开源控件
http://blog.coderclock.com/2017/05/22/android/open-source-android-app-guide-view-library/ 开源整理:Andro ...