原生JS实现几个常用DOM操作API实例

 更新时间:2017年01月19日 09:22:59   投稿:jingxian  
下面小编就为大家带来一篇原生JS实现几个常用DOM操作API实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

原生实现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实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 基于JS实现简单的3D立方体自动旋转

    基于JS实现简单的3D立方体自动旋转

    这篇文章主要为大家详细介绍了如何利用JavaScript实现简单的3D立方体自动旋转的效果,文中的实现代码讲解详细,感兴趣的可以尝试一下
    2022-06-06
  • Google 二维条码 API 整理

    Google 二维条码 API 整理

    Google 二维条码 API 整理,需要的朋友可以参考下。
    2010-11-11
  • javascript 网站常用的iframe分割

    javascript 网站常用的iframe分割

    就是一个页面使用两个iframe来调用内容,实现页面导航,更容易控制,可控制性好
    2008-06-06
  • ECMAScript 的 6 种简单数据类型

    ECMAScript 的 6 种简单数据类型

    这篇文章主要介绍了ECMAScript的 6 种简单数据类型,ECMAScript的数据类型很灵活,一种数据类型可以当作多种数据类型来使用,具体使用详情文章详细介绍需要的小伙伴可以参考一下
    2022-06-06
  • JavaScript数组之展开运算符详解

    JavaScript数组之展开运算符详解

    这篇文章主要给大家介绍了关于JavaScript数组之展开运算符的相关资料,你可以通过展开操作符(Spread operator)扩展一个数组对象和字符串,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • javascript引用类型之时间Date和数组Array

    javascript引用类型之时间Date和数组Array

    引用类型的值(对象)其实就是引用类型的一个实例,接下来,通过本篇文章给大家介绍javascript引用类型之时间Date和数组Array,需要的朋友可以参考下
    2015-08-08
  • JavaScript中常见的Polyfill介绍

    JavaScript中常见的Polyfill介绍

    在多姿多彩的JavaScript世界,Polyfill如同一座架在浏览器兼容性鸿沟之上的桥梁,本文将介绍常见的JavaScript Polyfill兼容方案,并举例说明它们的应用,需要的可以参考下
    2023-12-12
  • 基于JavaScript实现年月日三级联动

    基于JavaScript实现年月日三级联动

    这篇文章主要为大家详细介绍了基于JavaScript实现年月日三级联动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • JS控件ASP.NET的treeview控件全选或者取消(示例代码)

    JS控件ASP.NET的treeview控件全选或者取消(示例代码)

    本篇文章主要是对JS控件ASP.NET的treeview控件全选或者取消的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • 教你如何使用THREEJS实现一个可调节档位、可摇头的电风扇

    教你如何使用THREEJS实现一个可调节档位、可摇头的电风扇

    夏天到了,用Three.js实现一个可以摇头和调节档位的电风扇,主要使用到Blender处理3D模型,用Vite+Typescript搭建项目框架,这篇文章主要介绍了使用THREEJS实现一个可调节档位、可摇头的电风扇,需要的朋友可以参考下
    2023-06-06

最新评论