原生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 相关文章推荐
Riot.js 快速的JavaScript单元测试框架
Nov 09 Javascript
javascript实现的在当前窗口中漂浮框的代码
Mar 15 Javascript
利用Keydown事件阻止用户输入实现代码
Mar 11 Javascript
jQuery学习笔记之总体架构
Jun 03 Javascript
js实现新年倒计时效果
Dec 10 Javascript
浅谈JavaScript 浏览器对象
Jun 03 Javascript
详解webpack es6 to es5支持配置
May 04 Javascript
JavaScript使用readAsDataUrl方法预览图片
May 10 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
Jun 05 Javascript
使用重写url机制实现验证码换一张功能
Aug 01 Javascript
Vue2 SSR渲染根据不同页面修改 meta
Nov 20 Javascript
jquery实现动态添加附件功能
Oct 23 jQuery
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 str_pad 函数使用详解
2009/01/13 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
List the Codec Files on a Computer
2007/06/18 Javascript
js几个验证函数代码
2010/03/25 Javascript
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
js实现网页收藏功能
2015/12/17 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
node.js发送邮件email的方法详解
2017/01/06 Javascript
用file标签实现多图文件上传预览
2017/02/14 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
web前端vue之CSS过渡效果示例
2018/01/10 Javascript
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
JSON的parse()方法介绍
2019/01/31 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
Python中给List添加元素的4种方法分享
2014/11/28 Python
简单介绍Python中的JSON模块
2015/04/08 Python
Python探索之创建二叉树
2017/10/25 Python
Django实现图片上传功能步骤解析
2020/04/22 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
用Python写一个for循环的例子
2016/07/19 面试题
个人工作保证书
2015/02/28 职场文书