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加载完毕,渲染引 ...
随机推荐
- [转]javascript单元测试
1. 什么是单元测试 在计算机编程中,单元测试(又称为模块测试)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小可测试部件.在过程化编程中,一个单元就是单 ...
- java多线程编程核心技术——第四章总结
第一节使用ReentrantLock类 1.1使用ReentrantLock实现同步:测试1 1.2使用ReentrantLock实现同步:测试2 1.3使用Condition实现等待/同步错误用法与 ...
- Ajax知识点整理
一.javascript原生Ajax 1.简介 Ajax是Asynchronous JavaScript+XML(异步JavaScript和XML)的缩写. 该名称诞生于XML还是数据传输首选格式的时 ...
- HDOJ1073(gets 应用)
练习操作字符串的好题. #include<cstdio> #include<algorithm> #include<cstring> using namespace ...
- 二、java 与 scala相互调用
介绍:scala 是简化的java,运行于jvm的脚步语言.Java和scala通过各自编译器编译过都是jvm能解析class文件.本文介绍java和scala如何互调 scala的源代码文件是以. ...
- 启动新内核出现:Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/51841281 启动新内核出现错误:Kernel panic - not synci ...
- [.net] 无法创建虚拟目录。已将URL“XXX”映射到IIS Express网站上的一个不同的文件夹
工作时,在修改项目属性,Web中服务器时,出现了下面的错误: 各种折腾后,找到下面的解决方法: 1.找到项目在本地的目录,目录下有当前项目的项目文件,文件名以.csproj为后缀名. 2.用文本编辑软 ...
- poi包的几行基本的设置单元格样式
——杂言:写过很多遍这段代码,今天姑且记录一下,便于翻阅. jar:poi-3.7.jar 注意:第8行应该调用cellStyle.setFillForeGroundColor(HSSFColor.G ...
- mouseenter与mouseover的区别
mouseover 事件:只有在鼠标指针穿过被选元素时,才会触发. mouseover 事件:鼠标指针穿过任何子元素,都会触发. 请看例子的演示.
- cocos2dx之lua绑定简析
一.总原则:c++对象的生命期不依赖lua gc管理,手动创建的对象要手动销毁 二.引擎层在设计上就是支持脚本概念的(也就是说脚本的使用是“侵入式”的),与lua打交道的代码都封在CCLuaEngin ...