oneuijs/You-Dont-Need-jQuery

https://github.com/oneuijs/You-Dont-Need-jQuery/blob/master/README.zh-CN.md

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 返回第一个匹配的 Element
  • document.querySelectorAll 返回所有匹配的 Element 组成的 NodeList。它可以通过 [].slice.call() 把它转成 Array
  • 如果匹配不到任何 Element,jQuery 返回空数组 [],但 document.querySelector 返回 null,注意空指针异常。当找不到时,也可以使用 || 设置默认的值,如 document.querySelectorAll(selector) || []

注意:document.querySelector 和 document.querySelectorAll 性能很。如果想提高性能,尽量使用 document.getElementByIddocument.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相关推荐

  1. jquery iframe 返回上一页_你不需要jQuery

    前端发展很快,现代浏览器原生 API 已经足够好用.我们并不需要为了操作 DOM.Event 等再学习一下 jQuery 的 API.同时由于 React.Angular.Vue 等框架的流行,直接操 ...

  2. 原生JS替代jQuery的各种方法汇总

    前端发展很快,现代浏览器原生 API 已经足够好用.我们并不需要为了操作 DOM.Event 等再学习一下 jQuery 的 API.同时由于 React.Angular.Vue 等框架的流行,直接操 ...

  3. 原生js替换jQuery各种方法-中文版

    原文https://github.com/nefe/You-D... You Don't Need jQuery 前端发展很快,现代浏览器原生 API 已经足够好用.我们并不需要为了操作 DOM.Ev ...

  4. Ajax接收Java异常_java – 处理来自Servlet的Jquery AJAX响应中的异常

    我的servlet代码是 try{ //something response.setStatus(201); out.print("Data successfully saved" ...

  5. Jquery DIV滚动至浏览器顶部后固定不动代码

    获取元素(这里定位元素A)距离顶部的高度,接着设定scroll滚动的事件,比如超过那个高度,把A的位置设定为fixed,小于该高度,修改回relative. 效果例1 代码如下复制代码 <scr ...

  6. jquery.raty评星插件

    <!DOCTYPE html> <html><head><meta charset="utf-8" /><title>j ...

  7. jquery autocomplete demo

    根据用户输入值进行搜索和过滤,让用户快速找到并从预设值列表中选择. jquery.autocomplete参考地址 http://bassistance.de/jquery-plugins/jquer ...

  8. 在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 ...

  9. 火狐浏览器允许ajax,解决火狐浏览器发送jquery的ajax请求无效的问题

    今天遇到这样一个问题: 页面在chrome下发送ajax的请求是没有问题的,但是在firfox下无效. 代码大致如下: //前面省略 ..... 生成成绩 查询成绩 ...... ...... fun ...

最新文章

  1. CodeForces - 1109A Sasha and a Bit of Relax(思维+异或和,好题)
  2. 几个用于序列化的代码片段
  3. 群晖能从linux备份数据吗,通过rsync将Linux服务器数据备份到群晖
  4. 【python】人机大战
  5. HDU-1069 Monkey and Banana 动态规划
  6. java插件-IE浏览器配置方法
  7. JAVA JSP学生助学金管理系统 jsp学生资助管理系统jsp学生管理系统jsp贷款管理系统jsp大学生贷款管理系统
  8. 企业微信接口下载微盘文件
  9. System.InvalidOperationException:“在应用程序配置文件中找不到名为“LDOAEntities”的连接字符串。”
  10. bugku-writeup-MISC-宽带信息泄露
  11. mysql如何使用多核cpu_利用多核 CPU 实现并行计算
  12. [渝粤教育] 石家庄铁道大学 理论力学 参考 资料
  13. Unity 设置程序在后台运行
  14. Firefox(火狐浏览器)丰富的Web开发辅助插件
  15. 微信小程序-记录用户足迹
  16. gorm快捷查询手册
  17. 【总结】放电管知识大全,看过这篇你都了解了
  18. DotNetCore深入了解之二HttpContext类
  19. Vue实战:vuex的五个基本属性和用法
  20. 显卡占用率低的问题,终于找到原因解决了

热门文章

  1. linux s t i a权限,关于Linux下s、t、i、a权限
  2. ndarray对象的建立
  3. AWS 给负载均衡器配置侦听器并上传IAM证书
  4. C++(4)--初识变量、数据类型
  5. 好玩的脚本代码大全_Github | 推荐一个Python脚本集合项目
  6. 关于python语言的编程模式、哪个说法正确_测验1: Python基本语法元素 (第1周) 单选题+程序题...
  7. STL源码剖析 关联式容器 红黑树
  8. std::reserves使用
  9. 虚拟机下Ubuntu配置IP地址和网段
  10. GCC 命令选项使用详解