JS对DOM节点操作整理

获取节点:

//按照ID获取
document.getElementById(‘element‘);
//按照节点名称获取,返回类数组对象
document.getElementsByTagName(‘element‘);
//按照name名称获取,返回类数组对象
document.getElementsByName(‘element‘);
// 按照className获取,返回类数组对象,IE7及以下并不支持;
document.getElementsByClassName(‘className‘)
//html5提供的新接口,类似jq的选择器,可以使用层叠关系,多选,返回值为第一个元素
document.querySelector(‘.element‘)  //根据class
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对象
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")," ");
    };
} 
时间: 2024-12-19 18:33:30

JS对DOM节点操作整理的相关文章

原生JS的DOM节点操作

DOM(Document Object Model/文档对象模型)是针对HTML和XML文档的一个API.DOM节点树:在文档中出现的空格.回车.标签.注释.文本.doctype.标签等都属于DOM节点. 操作DOM节点的方式无非就是:创建.添加(插入).移除.替换.查找(获取).克隆DOM节点. 创建文本节点:var newText = document.createTextNode('文本节点');创建标签节点:var newNode = document.createElement('di

js中DOM 节点的一些操作方法

什么是DOM DOM:文档对象模型.DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构.目的其实就是为了能让js操作html元素而制定的一个规范. DOM就是由节点组成的. 解析过程 HTML加载完毕,渲染引擎会在内存中把HTML文档,生成一个DOM树,getElementById是获取内中DOM上的元素节点.然后操作的时候修改的是该元素的属性. DOM树(一切都是节点) DOM的数据结构如下: 上图可知,在HTML当中,一切都是节点:(非常重要) 元素节点:HMTL标签. 文本

(转载)html dom节点操作(获取/修改/添加或删除)

DOM 是关于如何获取.修改.添加或删除 HTML 元素的标准,下面为大家介绍下html dom节点操作,感兴趣的朋友可以参考下 HTML DOM 是关于如何获取.修改.添加或删除 HTML 元素的标准.在 HTML DOM 中,所有事物都是节点.DOM 是被视为节点树的 HTML. 根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点: 整个文档是一个文档节点 每个 HTML 元素是元素节点 HTML 元素内的文本是文本节点 每个 HTML 属性是属性节点 注释是注释节

深入理解DOM节点操作

× 目录 [1]创建节点 [2]插入节点 [3]移除节点[4]替换节点[5]复制节点 前面的话 一般地,提起操作会想到“增删改查”这四个字,而DOM节点操作也类似地对应于此,接下来将详细介绍DOM的节点操作方法 前提 DOM提供节点操作的方法是因为DOM节点关系指针都是只读的 下列代码中想通过修改myUl的父级节点来修改其节点关系,但由于parentNode属性是只读的,所以修改无效,在IE8-浏览器下甚至会报错 <div id="myDiv"></div> &

jQuery DOM节点操作 - 父节点、子节点、兄弟节点

------------------------------------------------------------------- 源文地址: http://www.cnblogs.com/yunlei0821/p/7577400.html ,转载请务必保留此出处. 子(/孙)节点: .children([selector]). 获得匹配元素集合中每个元素的所有直接子元素(选择器可选). 实例: <div> <a href="#"><span>w

原生JS获取DOM 节点到浏览器顶部的距离或者左侧的距离

关于js获取dom 节点到浏览器顶/左部的距离,Jquery里面有封装好的offset().top/offset().left,只到父级的顶/左部距离position().top/position().left: 原生写的话就是用获取节点,do while循环就可以了.代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta

JS Dom节点操作demo!

通过黑马课程的学习,在这里分享一个js Dom中节点操作的小练习 需求:使用js创建一个4*3的表格table. onload = function(){ function c(tagName){ return document.createElement(tagName); } var table = c('table'); var tbody = c('tbody'); table.appendChild(tbody); for(var i = 0;i<4;i++){ var tr = c(

js的DOM节点访问与操作

1.访问DOM节点 1.1 按id取元素:getElememtByld("标签的id") 1.2 按标签名取元素集:getElementsByTagName()返回一个对象数组 2.操作元素内的文本 2.1 简单的方法是innerText(),但是FireFox浏览器不兼容. function text(e){ var t=""; //如果传入的是元素,则继续遍历其元素 //否则假定它是一个数组 e=e.childNodes || e; //遍历所有字节点 for(

高效率http页面优化法则一【JS对DOM的操作】

高效http页面优化法则一很多人都认为JS的效率太慢了,都不愿意用js来实现相对困难一点的程序逻辑.在这里我要说的是其实js的效率并不慢,慢的是DOM,如果操作好DOM,你的js效率将提高接近千倍(这并不是什么夸张的数字). 1. 批量增加Dom:使用修改innerHTML的方式 尽量使用修改innerHTML的方式而不是用appendChild的方式; 因为使用innerHTML开销更小,速度更快,同时也更加内存安全. 有一点需要注意的是,用innerHTML方式添加时,一定不要在循环中使用