oneuijs/You-Dont-Need-jQuery
oneuijs/You-Dont-Need-jQuery
You Don't Need jQuery
前端发展很快,现代浏览器原生 API 已经足够好用。我们并不需要为了操作 DOM、Event 等再学习一下 jQuery 的 API。同时由于 React、Angular、Vue 等框架的流行,直接操作 DOM 不再是好的模式,jQuery 使用场景大大减少。本项目总结了大部分 jQuery API 替代的方法,暂时只支持 IE10+ 以上浏览器。
Translations
Query Selector
常用的 class、id、属性 选择器都可以使用 document.querySelector
或 document.querySelectorAll
替代。区别是
document.querySelector
返回第一个匹配的 Elementdocument.querySelectorAll
返回所有匹配的 Element 组成的 NodeList。它可以通过[].slice.call()
把它转成 Array- 如果匹配不到任何 Element,jQuery 返回空数组
[]
,但document.querySelector
返回null
,注意空指针异常。当找不到时,也可以使用||
设置默认的值,如document.querySelectorAll(selector) || []
注意:
document.querySelector
和document.querySelectorAll
性能很差。如果想提高性能,尽量使用document.getElementById
、document.getElementsByClassName
或document.getElementsByTagName
。
1.0 Query by selector
// jQuery (selector);// Native document.querySelectorAll(selector);
1.1 Query by class
// jQuery ();// Native document.querySelectorAll();document.getElementsByClassName();
1.2 Query by id
// jQuery ();// Native document.querySelector();document.getElementById();
1.3 Query by attribute
// jQuery (a[target=_blank]);// Native document.querySelectorAll(a[target=_blank]);
1.4 Find sth.
Find nodes
// jQuery .();// Native .querySelectorAll();
Find body
// jQuery ();// Native document.;
Find Attribute
// jQuery .();// Native .getAttribute();
Find data attribute
// jQuery .();// Native // using getAttribute .getAttribute(data-foo); // you can also use `dataset` if only need to support IE 11+ .dataset[];
1.5 Sibling/Previous/Next Elements
Sibling elements
// jQuery .siblings();// Native [].filter.(.parentNode.children, function(child) {return child el; });
Previous elements
// jQuery .();// Native .previousElementSibling;
Next elements
// next .(); .nextElementSibling;
1.6 Closest
Closest 获得匹配选择器的第一个祖先元素,从当前元素开始沿 DOM 树向上。
// jQuery .closest(queryString);// Native function closest(, selector) {const matchesSelector .matches .webkitMatchesSelector .mozMatchesSelector .msMatchesSelector;while (el) {(matchesSelector.(el, selector)) {return el;} {el .parentElement;}}return ; }
1.7 Parents Until
获取当前每一个匹配元素集的祖先,不包括匹配元素的本身。
// jQuery .parentsUntil(selector, filter);// Native function parentsUntil(, selector, filter) {const result [];const matchesSelector .matches .webkitMatchesSelector .mozMatchesSelector .msMatchesSelector;// match start from parentel .parentElement;while (el matchesSelector.(el, selector)) {(filter) {result.(el);} {(matchesSelector.(el, filter)) {result.(el);}}el .parentElement;}return result; }
1.8 Form
Input/Textarea
// jQuery (#my-input).();// Native document.querySelector(#my-input).value;
Get index of e.currentTarget between
.radio
// jQuery (.currentTarget).index(.radio);// Native [].indexOf.(document.querySelectorAll(.radio), .currentTarget);
1.9 Iframe Contents
jQuery 对象的 iframe
contents()
返回的是 iframe 内的document
Iframe contents
// jQuery $iframe.contents();// Native iframe.contentDocument;
Iframe Query
// jQuery $iframe.contents().();// Native iframe.contentDocument.querySelectorAll();
⬆ 回到顶部
CSS & Style
2.1 CSS
Get style
// jQuery .(color);// Native // 注意:此处为了解决当 style 值为 auto 时,返回 auto 的问题 const .ownerDocument.defaultView; // null 的意思是不返回伪类元素 .getComputedStyle(el, ).color;
Set style
// jQuery .({ color #ff0011 });// Native .style.color #ff0011;
Get/Set Styles
注意,如果想一次设置多个 style,可以参考 oui-dom-utils 中 setStyles 方法
Add class
// jQuery .addClass(className);// Native .classList.(className);
Remove class
// jQuery .removeClass(className);// Native .classList.remove(className);
has class
// jQuery .hasClass(className);// Native .classList.contains(className);
Toggle class
// jQuery .toggleClass(className);// Native .classList.toggle(className);
2.2 Width & Height
Width 与 Height 获取方法相同,下面以 Height 为例:
Window height
// jQuery (window).height();// Native // 不含 scrollbar,与 jQuery 行为一致 window.document.documentElement.clientHeight; // 含 scrollbar window.innerHeight;
Document height
// jQuery (document).height();// Native document.documentElement.scrollHeight;
Element height
// jQuery .height();// Native // 与 jQuery 一致(一直为 content 区域的高度) function getHeight() {const styles .getComputedStyle(el);const height .offsetHeight;const borderTopWidth parseFloat(styles.borderTopWidth);const borderBottomWidth parseFloat(styles.borderBottomWidth);const paddingTop parseFloat(styles.paddingTop);const paddingBottom parseFloat(styles.paddingBottom);return height borderBottomWidth borderTopWidth paddingTop paddingBottom; } // 精确到整数(border-box 时为 height 值,content-box 时为 height + padding + border 值) .clientHeight; // 精确到小数(border-box 时为 height 值,content-box 时为 height + padding + border 值) .getBoundingClientRect().height;
Iframe height
$iframe .contents() 方法返回 iframe 的 contentDocument
// jQuery (iframe).contents().height();// Native iframe.contentDocument.documentElement.scrollHeight;
2.3 Position & Offset
Position
// jQuery .position();// Native { left .offsetLeft, top .offsetTop }
Offset
// jQuery .offset();// Native function getOffset () {const .getBoundingClientRect();return {top . window.pageYOffset document.documentElement.clientTop,left . window.pageXOffset document.documentElement.clientLeft} }
2.4 Scroll Top
// jQuery (window).scrollTop();// Native (document.documentElement document.documentElement.scrollTop) document..scrollTop;
⬆ 回到顶部
DOM Manipulation
3.1 Remove
// jQuery .remove();// Native .parentNode.removeChild(el);
3.2 Text
Get text
// jQuery .();// Native .textContent;
Set text
// jQuery .(string);// Native .textContent string;
3.3 HTML
Get HTML
// jQuery .();// Native .innerHTML;
Set HTML
// jQuery .(htmlString);// Native .innerHTML htmlString;
3.4 Append
Append 插入到子节点的末尾
// jQuery .append(<div id='container'>hello</div>);// NativenewEl document.createElement(); newEl.setAttribute(, container); newEl.innerHTML hello; .appendChild(newEl);
3.5 Prepend
// jQuery .prepend(<div id='container'>hello</div>);// NativenewEl document.createElement(); newEl.setAttribute(, container); newEl.innerHTML hello; .insertBefore(newEl, .firstChild);
3.6 insertBefore
在选中元素前插入新节点
// jQuery $newEl.insertBefore(queryString);// Native const target document.querySelector(queryString); target.parentNode.insertBefore(newEl, target);
3.7 insertAfter
在选中元素后插入新节点
// jQuery $newEl.insertAfter(queryString);// Native const target document.querySelector(queryString); target.parentNode.insertBefore(newEl, target.nextSibling);
⬆ 回到顶部
用 fetch 和 fetch-jsonp 替代
⬆ 回到顶部
Events
完整地替代命名空间和事件代理,链接到 https://github.com/oneuijs/oui-dom-events
5.1 Bind an event with on
// jQuery .(eventName, eventHandler);// Native .addEventListener(eventName, eventHandler);
5.2 Unbind an event with off
// jQuery .(eventName, eventHandler);// Native .removeEventListener(eventName, eventHandler);
5.3 Trigger
// jQuery (el).trigger(custom-event, {key1 });// Native(window.CustomEvent) {const event CustomEvent(custom-event, {detail {key1 }}); } {const event document.createEvent(CustomEvent);event.initCustomEvent(custom-event, , , {key1 }); }.dispatchEvent(event);
⬆ 回到顶部
Utilities
6.1 isArray
// jQuery .isArray(range);// Native Array.isArray(range);
6.2 Trim
// jQuery .(string);// Native string.();
6.3 Object Assign
继承,使用 object.assign polyfill https://github.com/ljharb/object.assign
// jQuery .extend({}, defaultOpts, opts);// Native Object.assign({}, defaultOpts, opts);
6.4 Contains
// jQuery .contains(el, child);// Native el child .contains(child);
⬆ 回到顶部
Alternatives
- 你可能不需要 jQuery (You Might Not Need jQuery) - 如何使用原生 JavaScript 实现通用事件,元素,ajax 等用法。
- npm-dom 以及 webmodules - 在 NPM 上提供独立 DOM 模块的组织
Browser Support
Latest ✔ | Latest ✔ | 10+ ✔ | Latest ✔ | 6.1+ ✔ |
License
转载于:https://www.cnblogs.com/WhiteHorseIsNotHorse/p/6137041.html
oneuijs/You-Dont-Need-jQuery相关推荐
- jquery iframe 返回上一页_你不需要jQuery
前端发展很快,现代浏览器原生 API 已经足够好用.我们并不需要为了操作 DOM.Event 等再学习一下 jQuery 的 API.同时由于 React.Angular.Vue 等框架的流行,直接操 ...
- 原生JS替代jQuery的各种方法汇总
前端发展很快,现代浏览器原生 API 已经足够好用.我们并不需要为了操作 DOM.Event 等再学习一下 jQuery 的 API.同时由于 React.Angular.Vue 等框架的流行,直接操 ...
- 原生js替换jQuery各种方法-中文版
原文https://github.com/nefe/You-D... You Don't Need jQuery 前端发展很快,现代浏览器原生 API 已经足够好用.我们并不需要为了操作 DOM.Ev ...
- Ajax接收Java异常_java – 处理来自Servlet的Jquery AJAX响应中的异常
我的servlet代码是 try{ //something response.setStatus(201); out.print("Data successfully saved" ...
- Jquery DIV滚动至浏览器顶部后固定不动代码
获取元素(这里定位元素A)距离顶部的高度,接着设定scroll滚动的事件,比如超过那个高度,把A的位置设定为fixed,小于该高度,修改回relative. 效果例1 代码如下复制代码 <scr ...
- jquery.raty评星插件
<!DOCTYPE html> <html><head><meta charset="utf-8" /><title>j ...
- jquery autocomplete demo
根据用户输入值进行搜索和过滤,让用户快速找到并从预设值列表中选择. jquery.autocomplete参考地址 http://bassistance.de/jquery-plugins/jquer ...
- 在Ant-design-pro框架中引入jQuery和jQuery-ui步骤
1.安装jQuery和jQuery-ui npm i jquery s npm i jquery-ui s yarn install 2.在vue.config.js中进行配置 // webpack ...
- 火狐浏览器允许ajax,解决火狐浏览器发送jquery的ajax请求无效的问题
今天遇到这样一个问题: 页面在chrome下发送ajax的请求是没有问题的,但是在firfox下无效. 代码大致如下: //前面省略 ..... 生成成绩 查询成绩 ...... ...... fun ...
最新文章
- CodeForces - 1109A Sasha and a Bit of Relax(思维+异或和,好题)
- 几个用于序列化的代码片段
- 群晖能从linux备份数据吗,通过rsync将Linux服务器数据备份到群晖
- 【python】人机大战
- HDU-1069 Monkey and Banana 动态规划
- java插件-IE浏览器配置方法
- JAVA JSP学生助学金管理系统 jsp学生资助管理系统jsp学生管理系统jsp贷款管理系统jsp大学生贷款管理系统
- 企业微信接口下载微盘文件
- System.InvalidOperationException:“在应用程序配置文件中找不到名为“LDOAEntities”的连接字符串。”
- bugku-writeup-MISC-宽带信息泄露
- mysql如何使用多核cpu_利用多核 CPU 实现并行计算
- [渝粤教育] 石家庄铁道大学 理论力学 参考 资料
- Unity 设置程序在后台运行
- Firefox(火狐浏览器)丰富的Web开发辅助插件
- 微信小程序-记录用户足迹
- gorm快捷查询手册
- 【总结】放电管知识大全,看过这篇你都了解了
- DotNetCore深入了解之二HttpContext类
- Vue实战:vuex的五个基本属性和用法
- 显卡占用率低的问题,终于找到原因解决了
热门文章
- linux s t i a权限,关于Linux下s、t、i、a权限
- ndarray对象的建立
- AWS 给负载均衡器配置侦听器并上传IAM证书
- C++(4)--初识变量、数据类型
- 好玩的脚本代码大全_Github | 推荐一个Python脚本集合项目
- 关于python语言的编程模式、哪个说法正确_测验1: Python基本语法元素 (第1周) 单选题+程序题...
- STL源码剖析 关联式容器 红黑树
- std::reserves使用
- 虚拟机下Ubuntu配置IP地址和网段
- GCC 命令选项使用详解