JS对DOM节点操作整理
获取节点:
- //按照ID获取
- document.getElementById('element');
- //按照节点名称获取,返回类数组对象
- document.getElementsByTagName('element');
- //按照name名称获取,返回类数组对象
- document.getElementsByName('element');
- // 按照className获取,返回类数组对象,IE8及以下并不支持;
- document.getElementsByClassName('className')
- //html5提供的新接口,类似jq的选择器,可以使用层叠关系,多选,返回值为第一个元素
- document.querySelector('.element') //根据class querySelector在IE7以下不支持,IE8支持
- document.querySelector('#element') //根据id
- document.querySelector('#element .div') //层叠关系
- document.querySelector('.div,.div2') //多选
- document.querySelector("div.test > p:first-child"); //子选择器
- document.querySelector("div.test + p"); //兄弟选择器
- document.querySelector("div[type=qq]") //属性选择器;
- //使用方法同上,也是html5提供的新接口,这个返回类数组对象
- document.querySelectorAll('.element')
获取子节点:
- //元素子节点集合,这个有兼容性问题,在IE9以下,会忽略文本节点,比如换行符,空格,文字,而IE9以上,包括现代浏览器会获取文本节点,可以通过nodeType来判断是哪种类型的节点,只有当nodeType==1时才是元素节点,2是属性节点,3是文本节点。
- element.childNodes
- //元素子节点集合,这个不返回文本节点,直接获取元素节点,也是最常用的,兼容性也不错,只是在IE9以下,会包含注释节点,只要div里面不写注释也就没啥大问题
- element.children
获取第一个子节点:
- //获取元素的第一个子节点,这个同样有兼容性问题,在IE9以下会忽略文本节点,IE9以上及其它现代浏览器则不会
- element.firstChild
- //同样获取元素的第一个子节点,但是在IE9以下不支持,现代浏览器中会忽略文本节点。
- element.firstElementChild
- //我们可以通过下面的写法获取第一个子节点,来兼容所有浏览器。
- var firstChild = ele.firstElementChild || ele.firstChild
- alert(firstChild)
获取最后一个子节点:
- //获取元素的最后一个子节点,同firstChild一样,这个同样有兼容性问题,在IE9以下会忽略文本节点,IE9以上及其它现代浏览器则不会
- element.lastChild
- //同样获取元素的第一个子节点,但是在IE9以下不支持,现代浏览器中会忽略文本节点。
- element.lastElementChild
- //我们可以通过下面的写法获取最后一个子节点,来兼容所有浏览器。
- var lastChild = ele.lastElementChild || ele.lastChild
- alert(lastChild)
获取父元素:
- //获取元素的父元素
- element.parentNode
- //获取元素的父元素,据说这个只支持IE,但是测试了一下貌似Firefox和chrome也支持,大部分情况下还是用parentNode来取代parentElement
- element.parentElement
获取上一个兄弟元素:
- //获取上一个兄弟元素,这个同上面获取第一个子节点一样的问题,在IE9以下会忽略文本节点,IE9以上及其它现代浏览器则不会
- element.previousSibling
- //同样获取上一个兄弟元素,但是在IE9以下不支持,现代浏览器中会忽略文本节点。
- element.previousElementSibling
- //我们可以通过下面的写法获取上一个兄弟元素,来兼容所有浏览器。
- var prevEle = ele.previousElementSibling || ele.previousSibling
- alert(prevEle)
获取下一个兄弟元素:
- //获取下一个兄弟元素,这个同上面获取第一个子节点一样的问题,在IE9以下会忽略文本节点,IE9以上及其它现代浏览器则不会
- element.nextSibling
- //同样获取下一个兄弟元素,但是在IE9以下不支持,现代浏览器中会忽略文本节点。
- element.nextElementSibling
- //我们可以通过下面的写法获取下一个兄弟元素,来兼容所有浏览器。
- var nextEle = ele.nextElementSibling || ele.nextSibling
- alert(nextEle)
获取上下兄弟元素:
- var siblings = Array.prototype.slice.call(el.parentNode.children);
- for (var i = siblings.length; i–;) {
- if (siblings[i] === el) {
- siblings.splice(i, 1);
- break;
- };
- };
- ;[].forEach.call(el.parentNode.children, function(child){
- if(child !== el);
- });
获取元素或者属性节点的标签名称:
- element.nodeName
获取元素的内容(包含HTML标签):
- element.innerHTML
获取元素的纯文本内容(不包含HTML标签):
- element.innerText //Firefox不认识这个
- element.textContent //Firefox用这个
设置元素的属性节点:
- element.setAttribute(Name,Value);
获取元素的属性节点:
- element.getAttribute(Name);
删除元素的属性节点:
- element.removeAttribute(Name);
创建元素:
- document.createElement('element'); //创建元素节点:
- document.createTextNode('text'); //创建文本节点:
- document.createAttribute('attribute'); //创建属性节点:
删除节点(必须从父层开始删除):
- parentNode.removeChild(ele);
插入节点:
- //插入到父节点的尾部
- parentNode.appendChild(ele);
- //插入到已存在节点的前面;
- parentNode.insertBefore(newNode,ele)
克隆节点:
- node.cloneNode(true) //传入true为深度复制
替换节点:
- parentNode.replaceChild(newNode,oldNode);
循环节点:
- [].forEach.call(ele,function(el,i){
- //xxx
- });
- for(var i = 0;i < ele.length;i ++){
- //ele[i]
- }
以下是HTML5提供的新方法:
- ele.classList //元素的class对象 IE9及以下不支持
- ele.classList.add('xxx') //添加class
- ele.classList.remove('xxx') //删除class
- ele.classList.toggle('xxx') //切换class
- ele.classList.contains('xxx') //是否包含class
以下是利用原生js实现对class的添加删除和判断:
- //添加class
- function addClass(_object,_clsname){
- var _clsname = _clsname.replace(".","");
- if(!hasClass(_object,_clsname)){
- _object.className = _object.className+(" "+_clsname);
- };
- }
- //判断是否存在已有class
- function hasClass(_object,_clsname){
- var _clsname = _clsname.replace(".","");
- var _sCls = " "+(_object.className)+" ";
- return (_sCls.indexOf(" "+_clsname+" ") != -1) ? true : false;
- }
- //删除class
- function delClass(_object,_clsname){
- var _clsname = _clsname.replace(".","");
- if(hasClass(_object,_clsname)){
- _object.className = _object.className.replace(new RegExp("(?:^|\\s)"+_clsname+"(?=\\s|$)","g")," ");
- };
- }
JS对DOM节点操作整理的更多相关文章
- 原生JS的DOM节点操作
DOM(Document Object Model/文档对象模型)是针对HTML和XML文档的一个API.DOM节点树:在文档中出现的空格.回车.标签.注释.文本.doctype.标签等都属于DOM节 ...
- js的DOM节点操作:创建 ,插入,删除,复制,查找节点
DOM含义:DOM是文档对象模型(Document Object Model,是基于浏览器编程的一套API接口,是W3C出台的推荐标准.其赋予了JS操作节点的能力.当网页被加载时,浏览器就会创建页面的 ...
- js中DOM 节点的一些操作方法
什么是DOM DOM:文档对象模型.DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构.目的其实就是为了能让js操作html元素而制定的一个规范. DOM就是由节点组成的. 解析过程 ...
- 深入理解DOM节点操作
× 目录 [1]创建节点 [2]插入节点 [3]移除节点[4]替换节点[5]复制节点 前面的话 一般地,提起操作会想到“增删改查”这四个字,而DOM节点操作也类似地对应于此,接下来将详细介绍DOM的节 ...
- (转载)html dom节点操作(获取/修改/添加或删除)
DOM 是关于如何获取.修改.添加或删除 HTML 元素的标准,下面为大家介绍下html dom节点操作,感兴趣的朋友可以参考下 HTML DOM 是关于如何获取.修改.添加或删除 HTML 元素 ...
- 原生JS获取DOM 节点到浏览器顶部的距离或者左侧的距离
关于js获取dom 节点到浏览器顶/左部的距离,Jquery里面有封装好的offset().top/offset().left,只到父级的顶/左部距离position().top/position() ...
- 04-老马jQuery教程-DOM节点操作及位置和大小
1. jQuery创建DOM标签 1.1 DOM动态创建标签的方法 DOM时代我们通过document的createElement方法动态创建标签.创建标签后,动态的给他添加属性.例如代码: // 动 ...
- 第一百六十七节,jQuery,DOM 节点操作,DOM 节点模型操作
jQuery,DOM 节点操作,DOM 节点模型操作 学习要点: 1.创建节点 2.插入节点 3.包裹节点 4.节点操作 DOM 中有一个非常重要的功能,就是节点模型,也就是 DOM 中的“M”.页面 ...
- 前端JavaScript之DOM节点操作
1.HTML DOM是啥 Document Object Model:定义了访问和操作HTML文档的标准方法,把HTML文档呈现为带有元素,属性和文本的树状结构 2.解析过程 HTML加载完毕,渲染引 ...
随机推荐
- 【跨域】Access-Control-Allow-Origin
- 本机不装Oracle,使用plsql连接远程Oracle的方法
由于Oracle的庞大,有时候我们需要在只安装Oracle客户端如plsql.toad等的情况下去连接远程数据库,可是没有安装Oracle就没有一切的配置文件去支持.最后终于发现一个很有效的方法,Or ...
- oracle数据库规划建议
之前负责的项目有用到oracle的,oracle dba给过一些建议,自己整理了一下,写再这里做个备忘 数据库需求分析: 1. 创建的数据库名称为maildb,并且字符集为UTF8. 2. 提供可连接 ...
- [转]PNG8和PNG24的区别
首先我们要知道: 1.png8和png24的根本区别,不是颜色位的区别,而是存储方式不同. 2.png8有1位的布尔透明通道(要么完全透明,要么完全不透明),png24则有8位(256阶)的布尔透明通 ...
- shell ## %% 使用说明
path='apps/home/usr/app/test.txt' a=${path##*/} b=${path#*/} c=${path%%/*} d=${path%/*}············· ...
- dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
概述 前段时间项目要做服务化,所以我比较了现在流行的几大RPC框架的优缺点以及使用场景,最终结合本身项目的实际情况选择了使用dubbox作为rpc基础服务框架.下面就简单介绍一下RPC框架技术选型的过 ...
- UDK编辑器 49条小提示
转自:http://www.cnblogs.com/hmxp8/archive/2012/02/09/2343674.html Very Helpful~ 01. First time using t ...
- spring 学习 requestMapping
1: @RequestMapping:处理请求地址映射的请求,有6个属性? ` value: URL 地址 method: GET/POST/PUT/DELETE co ...
- 浏览器重绘(repaint)和回流(reflow)的那点事
第一次听到重绘和回流是在鹅厂实习面试,那个时候对浏览器没有任何的概念,所以面试官说到这个问题的时候整个人都蒙圈了.下面是近期学习总结: 重绘(repaint)和回流(reflow) 文档初次加载时,H ...
- 如何更新node和npm版本
更新npm ---> npm undate -g 更新node ---> npm install -g -n n latest