原生js实现preAll和nextAll方法
一直以来都在好奇,jquery的prevAll和nextAll方法都是咋实现的,那么厉害,而且还那么方便。不得不说,jquery真的帮我们省去了开发中手写大量js代码带来的开发进度问题,而且很好的解决了js代码的浏览器兼容性问题,对于js领域来说,真的算是一场革命性的变革。但是如果知道了原理,读懂了jquery的源码,还是会恍然大悟的。下边就贴出自己写的原生js实现preAll和nextAll的方法:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>原生js实现preAll和nextAll方法</title>
<script>
HTMLElement.prototype.prevAll = function(){
var _parent = this.parentElement;
var _child = _parent.children;
var arr = [];
for(var i = 0;i < _child.length;i++){
var _childI = _child[i];
if(_childI == this){
break;
}
arr.push(_childI);
}
return arr;
};
HTMLElement.prototype.nextAll = function(){
var _parent = this.parentElement;
var _child = _parent.children;
var arr = [];
for(var i = _child.length - 1;i >= 0;i--){
var _childI = _child[i];
if(_childI == this){
break;
}
arr.unshift(_childI);
}
return arr;
};
function foo(dom){
console.log("prevAll:", dom.prevAll());
console.log("nextAll:", dom.nextAll());
}
</script>
</head>
<body>
<ul>
<li>我是之前元素1</li>
<li>我是之前元素2</li>
<li>我是之前元素3</li>
<li onclick="foo(this)" style="cursor:pointer;">点我就可以看到效果了</li>
<li>我是之后元素1</li>
<li>我是之后元素2</li>
<li>我是之后元素3</li>
<li>我是之后元素4</li>
</ul>
</body>
</html>
是不是知道了原生js的写法,你就会觉得其实自己也可以那么高大上了!
原生js实现preAll和nextAll方法的更多相关文章
- 【JS】怎样用原生JS实现jQuery的ready方法
Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,只是与window.onload方法还是有差别的. 总的来说,window. ...
- 用原生JS读写CSS样式的方法总结
为了日后方便查询,本人翻阅了一些资料总结了以下方法,仅限原生JS,如有不对的地方欢迎指出!只求大家看完觉得有学到点什么就OK了! 一.可以通过DOM节点对象的style对象(即CSSStyleDe ...
- 原生js 数组的迭代的方法
一.原生js Array给我们提供很多了方法.方便我们操作数组.这些方法的参数,都需要传入一个匿名函数,匿名函数中有三个参数,分别含义是:数组中的项.该项的索引.以及数组本身. 1.filter方法: ...
- 用.native修饰器来对外部组件进行构造器内部方法的调用以及用原生js获取构造器里的方法
html <div id="app"> <span v-text="number"></span> <btn @cli ...
- 前端跨域问题相关知识详解(原生js和jquery两种方法实现jsonp跨域)
1.同源策略 同源策略(Same origin policy),它是由Netscape提出的一个著名的安全策略.同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正 ...
- 原生JS替代jQuery的各种方法汇总
前端发展很快,现代浏览器原生 API 已经足够好用.我们并不需要为了操作 DOM.Event 等再学习一下 jQuery 的 API.同时由于 React.Angular.Vue 等框架的流行,直接操 ...
- 原生js封装的一些jquery方法
用js封装一些常用的jquery方法 记录一下 hasClass:判断是否有class function hasClass(ele, cls) { if (!ele || !cls) return f ...
- 原生js实现addClass,removeClass,hasClass方法
function hasClass(elem, cls) { cls = cls || ''; if (cls.replace(/\s/g, '').length == 0) return false ...
- 原生JS—实现图片循环切换的两种方法
今天我们主要讲讲如何使用原生JS实现图片的循环切换的方法.多余的话我们就不多说了,我们一个一个开始讲吧. 1 原生JS实现图片循环切换 -- 方法一 在上栗子之前我们先简单介绍一下所用的一些知识点. ...
随机推荐
- python 判断变量是否是 None 的三种写法
代码中经常会有变量是否为None的判断,有三种主要的写法:第一种是`if x is None`:第二种是 `if not x:`:第三种是`if not x is None`(这句这样理解更清晰`if ...
- Struts2 之值栈
值栈(ValueStack) http://www.cnblogs.com/bgzyy/p/8639893.html 这是我的有关 struts2 的第一篇文章,对于里面我们说到的一个 struts2 ...
- Docker学习笔记 - Docker Compose 脚本命令
Docker Compose 配置文件包含 version.services.networks 三大部分,最关键的是 services 和 networks 两个部分, version: '2' se ...
- SpringBoot应用的启动方式
一:IDE 运行Application这个类的main方法 二:在SpringBoot的应用的根目录下运行mvn spring-boot:run 三:使用mvn install 生成jar后运行 先到 ...
- sql server 查询表的创建时间
遇到一情况,前几天创建一个表,但是后来忙别的事情了,现在要用这个表,结果失忆了.....完全想不起来表名. 然后就想办法查询表的创建时间试图找回表名 最后找到了,根据表的创建时间排序,因为平常也用不到 ...
- s遇到错误不要慌,教你方法走四方
我觉得不管是新手还是老手,他们都会出错,有些错误控制台会报错,而有些错误控制台不会报错 面对不会报错的时候,就有一些人烦恼,不知道怎么办了,久而久之,就失去了对学习的乐趣. 所以我在这里说一下对错误处 ...
- python Django之Ajax
python Django之Ajax AJAX,Asynchronous JavaScript and XML (异步的JavaScript和XML),一种创建交互式网页应用的网页开发技术方案. 异步 ...
- python操作mysql增删查改
# coding=utf-8 ''' python操作mysql,需安装MySQLdb驱动 安装MySQLdb,请访问 http://sourceforge.net/projects/mysql-py ...
- requests-文件上传
import requests files = {'file':open('D://tomas.jpg','rb')}#设定一个files,打开文件对象 response = requests.pos ...
- Oracle表空间的管理方式
解释说明:表空间是一个逻辑概念:=> oracle 逻辑概念段区块管理方式: number one => tablespace number two=> segments Oracl ...