原生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 相关文章推荐
JavaScript与函数式编程解释
Apr 27 Javascript
JS获取IP、MAC和主机名的五种方法
Nov 14 Javascript
两种不同的方法实现js对checkbox进行全选和反选
May 13 Javascript
javascript动态创建及删除元素的方法
Dec 22 Javascript
JQuery跳出each循环的方法
Apr 16 Javascript
jQuery实现折叠、展开的菜单组效果代码
Sep 16 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
Oct 13 Javascript
谈一谈javascript中继承的多种方式
Feb 19 Javascript
Bootstrap 实现查询的完美方法
Oct 26 Javascript
基于Vue框架vux组件库实现上拉刷新功能
Nov 28 Javascript
JS中数组与对象的遍历方法实例小结
Aug 14 Javascript
在微信小程序中保存网络图片
Feb 12 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+mysqli批量查询多张表数据的方法
2015/01/29 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
php中的登陆login实例代码
2016/06/20 PHP
php上传excel表格并获取数据
2017/04/27 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
用JavaScript隐藏控件的方法
2009/09/21 Javascript
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
javascript正则匹配汉字、数字、字母、下划线
2014/04/10 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
2016/05/25 Javascript
bootstrap select插件封装成Vue2.0组件
2017/04/17 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
Electron 调用命令行(cmd)
2019/09/23 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
python中正则的使用指南
2016/12/04 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
Python bytes string相互转换过程解析
2020/03/05 Python
用python实现一个简单的验证码
2020/12/09 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
技术经理的自我评价范文
2013/12/03 职场文书
室内拓展活动方案
2014/02/13 职场文书
小露珠教学反思
2014/04/30 职场文书
运动会宣传语
2015/07/13 职场文书
Java 关于String字符串原理上的问题
2022/04/07 Java/Android