原生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 03 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
Aug 30 Javascript
改变隐藏的input中value的值代码
Dec 30 Javascript
javascript实现禁止复制网页内容
Dec 16 Javascript
封装好的一个万能检测表单的方法
Jan 21 Javascript
JavaScript的Date()方法使用详解
Jun 09 Javascript
使用堆实现Top K算法(JS实现)
Dec 25 Javascript
form表单转Json提交的方法(推荐)
Sep 23 Javascript
jquery操作ul的一些操作笔记整理(干货)
Aug 31 jQuery
JS实现显示当前日期的实例代码
Jul 03 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
Apr 08 Javascript
Js视频播放器插件Video.js使用方法详解
Feb 04 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新手上路(七)
2006/10/09 PHP
PHP生成UTF8文件的方法
2010/05/15 PHP
php创建无限级树型菜单
2015/11/05 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
2015/12/18 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
js确认删除对话框效果的示例代码
2014/02/20 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
2017/07/24 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python装饰器基础详解
2016/03/09 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
python使用 HTMLTestRunner.py生成测试报告
2017/10/20 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
python实现自动清理重复文件
2020/08/24 Python
深入理解Python变量的数据类型和存储
2021/02/01 Python
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
应届大学生自荐信
2013/12/05 职场文书
中专生的个人自我评价
2013/12/11 职场文书
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
保险经纪人求职信
2014/03/11 职场文书
家教广告词
2014/03/19 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
优秀教师个人材料
2014/12/15 职场文书
单位车辆管理制度
2015/08/05 职场文书
Go语言并发编程 sync.Once
2021/10/16 Golang