原生JS实现几个常用DOM操作API实例


Posted in Javascript onJanuary 19, 2017

原生实现jQuery的sibling方法

<body>
<span>我是span标签</span>
<div>我是一个div</div>
<h1 id="h1">我是标题</h1>
<p>我是一个段落</p>
<script type="text/javascript">
//获取元素的兄弟节点
function siblings(o){//参数o就是想取谁的兄弟节点,就把那个元素传进去
var a = [];//定义一个数组,用来存储o的兄弟元素
//previousSibling返回位于相同节点树层级的前一个元素
var p = o.previousSibling;
while(p){//先取o的前面的兄弟元素 判断有没有上一个兄弟元素,如果有则往下执行,p表示previousSibling
if(p.nodeType === 1){
a.push(p);
}
p = p.previousSibling//最后把上一个节点赋给p
}
a.reverse();//把顺序反转一下,这样元素的顺序就是按先后的了
//nextSibling返回位于相同节点树层级的下一个节点
var n = o.nextSibling;//再取o下面的兄弟元素
while(n){//判断有没有下一个兄弟结点,n是nextSibling的意思
if(n.nodeType === 1){//判断是否是元素节点
a.push(n);
}
n = n.nextSibling;
}
return a//最后按从老大到老小的顺序,把这一组元素返回
}
var oH = document.getElementById("h1");
console.log(siblings(oH));//[span, div, p, script]
</script>
</body>

原生实现jQuery的class选择器

//用数组模拟jQuery的class选择器
function getClassName(ParentId,NewClassName){
var AllClassElem = ParentId.getElementsByTagName(“*”);
var AllClass = [];
var i=0;
for(var i=0; i<AllClassElem.length; i++){
if(AllClassElem[i].className == NewClassName){
AllClass.push(AllClassElem[i]);
}
}
return AllClass;
}
//用法:
var PElementId=document.getElementById("bar");
var buttons = getClassName(PElementId,"sco");
//取id="bar"下class="sco"的元素;

getElementsByClassName()

/**
* 获取指定类名的元素对象集合
* @param {Object} node 父节点
* @param {String} classname 指定类名 
* @return {[Object]}目标对象集合
*/
function getElementsByClassName(node,classname) {
//如果浏览器支持则直接使用
 if (node.getElementsByClassName) { 
  return node.getElementsByClassName(classname);
 } else {
  return (function getElementsByClass(searchClass,node) {
    if ( node == null )
     node = document;
    var classElements = [],
      els = node.getElementsByTagName("*"),
      elsLen = els.length,
      pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)"), i, j;

    for (i = 0, j = 0; i < elsLen; i++) {
     if ( pattern.test(els[i].className) ) {
       classElements[j] = els[i];
       j++;
     }
    }
    return classElements;
  })(classname, node);
 }
}

addLoadEvent()

/**
* 方便的将在文档加载后运行的函数添加到window.onload中
* @param {function} func 待运行函数
*/
function addLoadEvent(func){
  var oldOnload = window.onload;
  //typeof 返回String类型
  if(typeof window.onload != 'function'){
    window.onload = func;
  }else{
    window.onload = function(){
      oldOnload();
      func();
    }
  }
}

addClass()

/**
* 为指定元素结点添加新类名
* element 元素结点
* value 类名
*/
function addClass(element,value){
//如果元素类名为空,直接将value赋值给相应的元素类名
  if(!element.className){
    element.className = value;
  }else{
  //否则需要将类名之间用空格隔开
    newClassName = element.className;
    //多个类名间添加空格
    newClassName += ' ';
    newClassName += value;
    element.className = newClassName;
  }
}

insertAfter()

/**
* 在目标元素结点后面插入新的元素结点
* newElement 待插入的新元素结点
* targetElement 目标元素结点
*/
function insertAfter(newElement,targetElement){
  var parent = targetElement.parentNode;
  if(parent.lastChild == targetElement){
    parent.appendChild(newElement);
  }else{
    parent.insertBefore(newElement,targetElement.nextSibling);
  }
}

getNextElement()

/**
* 获取下一个元素结点
* @param {Object} node 兄结点
* @return {Object || null}下一个元素结点或未获取到
*/
function getNextElement(node){
    var sibNode = node.nextSibling;
  if (sibNode.nodeType == 1) {
    return node;
  }
  if (sibNode.nextSibling) {
    //递归调用
    return getNextElement(node.nextSibling);
  }
  return null;
}

以上这篇原生JS实现几个常用DOM操作API实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS动态增加删除UL节点LI及相关内容示例
May 21 Javascript
原生JavaScript生成GUID的实现示例
Sep 05 Javascript
js 获取元素在页面上的偏移量的方法汇总
Apr 13 Javascript
jquery实现图片预加载
Dec 25 Javascript
Js的Array数组对象详解
Feb 22 Javascript
vue增删改查的简单操作
Jul 15 Javascript
vue.js实现只弹一次弹框
Jan 29 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
May 09 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
Feb 22 Javascript
vue 解决computed修改data数据的问题
Nov 06 Javascript
VsCode里的Vue模板的实现
Aug 12 Javascript
关于JavaScript轮播图的实现
Nov 20 Javascript
JS生成一维码(条形码)功能示例
Jan 19 #Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
Jan 19 #Javascript
javascript中json基础知识详解
Jan 19 #Javascript
JavaScript实现垂直滚动条效果
Jan 18 #Javascript
JavaScript实现水平进度条拖拽效果
Jan 18 #Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
Jan 18 #Javascript
基于JavaScript实现窗口拖动效果
Jan 18 #Javascript
You might like
php仿ZOL分页类代码
2008/10/02 PHP
php获取汉字首字母的函数
2013/11/07 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
Gambit vs CL BO3 第三场 2.13
2021/03/10 DOTA
jquery 弹出层实现代码
2009/10/30 Javascript
flash 得到自身url参数的代码
2009/11/15 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
jQuery实现html元素拖拽
2015/07/21 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
Javascript和jquery在selenium的使用过程
2019/10/31 jQuery
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
Python判断直线和矩形是否相交的方法
2015/07/14 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
在服务器上安装python3.8.2环境的教程详解
2020/04/26 Python
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
《最后的姿势》教学反思
2014/02/27 职场文书
合作经营协议书范本
2014/09/16 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
2015双创工作总结
2015/07/24 职场文书
关于车尾的标语大全
2015/08/11 职场文书
《包身工》教学反思
2016/02/23 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
html5表单的required属性使用
2021/07/07 HTML / CSS
前端JavaScript大管家 package.json
2021/11/02 Javascript
「海贼王」112.9万粉丝纪念图标公布
2022/03/21 日漫