原生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 相关文章推荐
基于jQuery的一个扩展form序列化到json对象
Dec 09 Javascript
javascript基础之查找元素的详细介绍(访问节点)
Jul 05 Javascript
关于删除时的提示处理(确定删除吗)
Nov 03 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
Oct 17 Javascript
充分发挥Node.js程序性能的一些方法介绍
Jun 23 Javascript
简单纯js实现点击切换TAB标签实例
Aug 23 Javascript
jquery实现select选择框内容左右移动代码分享
Nov 21 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
Sep 13 Javascript
Vue.js弹出模态框组件开发的示例代码
Jul 26 Javascript
理解javascript async的用法
Aug 22 Javascript
node将geojson转shp返回给前端的实现方法
May 29 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
Jan 29 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
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
解析php中const与define的应用区别
2013/06/18 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
Node.js操作系统OS模块用法分析
2019/01/04 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
Python 初始化多维数组代码
2008/09/06 Python
Python模拟登陆实现代码
2017/06/14 Python
python实现数据图表
2017/07/29 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
基于Django静态资源部署404的解决方法
2019/07/28 Python
python datetime处理时间小结
2020/04/16 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
智利最大的网上商店:Linio智利
2016/11/24 全球购物
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
台湾森森购物网:U-mall
2017/10/16 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
自我鉴定书面格式
2014/01/13 职场文书
社区十八大感言
2014/01/19 职场文书
小学运动会表扬稿
2014/01/19 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
MySQL 十大常用字符串函数详解
2021/06/30 MySQL
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS