You don't need jQuery

前端发展很快,现代浏览器原生API已经足够好用。我们并不需要为了操作DOM、Event等再学习Jquery的API。同时由于React、Angular、Vue等框架的流行,直接操作DOM不再是好的模式,jQuery使用场景大大减少。本项目总结了大部分jQuery API替代的方法,暂时只支持IE10+以上的浏览器。

1. Query Selector

常用的class、ID、属性选择器都可以使用document.querySelector或者 document.querySelecorAll替代。区别是:

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

注意: document.querySelectordocument.querySelectorAll性能很差,尽量使用document.getElementByIddocument.getElementsByClassName或者document.getElementsByTagName

  • 1.0. Query by selector
 //jQuery
 $('selector')

 //Native
document.querySelectorAll('selector');  

  • 1.1 Qeury by class
 //jQuery
$('.css')

 //Native
 document.getElementsByClassName('selector');

  • 1.2 Qeury by id
 //jQuery
$('#id')

 //Native
 document.getElementById('id');

  • 1.3 Query by attribute

    
    // jQuery
    $('a[target=_blank]');
    
    //Native 
    document.querySelector('a[target= _blank]');
    

  • 1.4 Find sth

    • Find nodes
    ```javascript
    

    //jQuery
    $el.find('li');

    //Native
    el.querySelector('li')   
    ```  
    
  • Find body
//jQuery
  $('body');

  //Native
  document.body;
  ```
  • Find Attribute
//jQuery
  $el.attr('foo');

  //Native
  e.getAttribute('foo');
  ```

  • 1.5 Sibling/Previous/Next Elements
  • Sibling elements

    
    //jQuery
    $el.sibglings();
    
    //Navtive
    [].filter.call(el.parentNode.children,function(child){
        return child!==el;
    });
    
  • Previous elements

    
    //jQuery
    $el.prev();
    
    //Navtive
    el.previousElementSibling;
    
  • Next elements

    
    //jQuery
    $el.next();
    
    //Navtive
    el.nextElementSibling;
    

  • 1.6 Closest
    Closest获得匹配选择器的第一个祖先元素,从当前元素开始沿DOM树向上。
    
    //jQuery
    $el.closest(queryString);
    
    //Navtive
    

function closest(el, selector) {
const machesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;
while (el)
if (matchesSelector.call(el, selector)) {
return el;
} else {
el = el.parentElement;
}
}
return null;
```


  • 1.7 Parents Until

获取当前每一个元素匹配元素集的祖先,不包括元素本身


      //jQuery
     $el.parentsUntil(selector,filter);
      
      //Native

function parentUntil(el, selector, filter) {
            const result = [];
            const matchesSelector = el.matchesSelector || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;
            //match start from parent
            el = el.parentElement;
            while (el && !matchesSelector.call(el, selector)) {
                if (!filter) {
                    result.push(el);
                } else {
                    if (matchesSelector.call(el, filter)) {
                        result.push(el);
                    }
                }
                el = el.parentElement;
            }
            return result;
        }


  • 1.8 Form

    • Input/Textarea
      //jQuery
      $('#my-input').val();
      
      //Native
      document.querySelector('#my-input').value;
    
    • Get index of e.currentTarget between .radio

        //jQuery
       $(e.currentTarget).index('.radio');
        
        //Native
       [].indexOf.call(document.querySelectorAll('.radio'),e.currentTarget);
      

  • 1.9 Iframe Contents
    jQuery 对象的iframe contents返回的是iframe内的document

    • Iframe contents
    
    //jQuery
    $iframe.contents();
    
    //Native
    iframe.contentDocument;
    

2. CSS & Style

  • 2.1 CSS
    • Get Style
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,682评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,277评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,083评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,763评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,785评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,624评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,358评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,261评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,722评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,900评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,030评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,737评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,360评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,941评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,057评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,237评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,976评论 2 355

推荐阅读更多精彩内容