欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

oneuijs/You-Dont-Need-jQuery

发布时间:2023/12/19 62 豆豆
生活随笔 收集整理的这篇文章主要介绍了 oneuijs/You-Dont-Need-jQuery 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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.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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。