原生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 子窗口操作父窗口的代码
Sep 21 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
Nov 25 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
Jul 31 Javascript
jQuery中scrollLeft()方法用法实例
Jan 16 Javascript
分享纯手写漂亮的表单验证
Nov 19 Javascript
jQuery如何解决IE输入框不能输入的问题
Oct 08 Javascript
angular和BootStrap3实现购物车功能
Jan 25 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
Aug 18 Javascript
JS伪继承prototype实现方法示例
Jun 20 Javascript
javascript 高级语法之继承的基本使用方法示例
Nov 11 Javascript
Vue项目配置跨域访问和代理proxy设置方式
Sep 08 Javascript
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
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数学运算
2011/12/30 PHP
PHP重定向的3种方式
2013/03/07 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
在javascript中关于节点内容加强
2013/04/11 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
2016/10/21 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
Vue中&quot;This dependency was not found&quot;问题的解决方法
2018/06/19 Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
2020/04/15 Javascript
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
详细探究Python中的字典容器
2015/04/14 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
使用pyshp包进行shapefile文件修改的例子
2019/12/06 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
2020/05/26 Python
PHP高级工程师面试问题推荐
2013/01/18 面试题
精细化工应届生求职信
2013/11/17 职场文书
英语教师岗位职责
2014/03/16 职场文书
公务员群众路线专题民主生活会发言材料
2014/09/17 职场文书
秋冬农业生产标语
2014/10/09 职场文书
党员转正申请报告
2015/05/15 职场文书
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技