原生javascript取代jquery的一些方法

1.选取元素jquery

 
1
2
3
4
5
6
7
8
9
10
// jQuery
var els = $( '.el' );
 
// Native
var els = document.querySelectorAll( '.el' );
 
// Shorthand
var $ = function (el) {
  return document.querySelectorAll(el);
}

querySelectorAll方法返回的是NodeList对象,须要转换为数组。git

 
1
myList = Array.prototype.slice.call(myNodeList)

2.建立元素github

 
1
2
3
4
5
// jQuery
var newEl = $( '<div/>' );
 
// Native
var newEl = document.createElement( 'div' );

3.添加事件web

 
1
2
3
4
5
6
7
8
9
10
11
// jQuery
$( '.el' ).on( 'event' , function () {
 
});
 
// Native
[].forEach.call(document.querySelectorAll( '.el' ), function (el) {
  el.addEventListener( 'event' , function () {
 
  }, false );
});

4.get/set属性数组

 
1
2
3
4
5
6
7
// jQuery
$( '.el' ).filter( ':first' ).attr( 'key' , 'value' );
$( '.el' ).filter( ':first' ).attr( 'key' );
 
// Native
document.querySelector( '.el' ).setAttribute( 'key' , 'value' );
document.querySelector( '.el' ).getAttribute( 'key' );

5.添加和移除样式Classapp

DOM元素自己有一个可读写的className属性,能够用来操做class。函数

HTML 5还提供一个classList对象,功能更强大(IE 9不支持)。post

 
1
2
3
4
5
6
7
8
9
// jQuery
$( '.el' ).addClass( 'class' );
$( '.el' ).removeClass( 'class' );
$( '.el' ).toggleClass( 'class' );
 
// Native
document.querySelector( '.el' ).classList.add( 'class' );
document.querySelector( '.el' ).classList.remove( 'class' );
document.querySelector( '.el' ).classList.toggle( 'class' );

6.追加元素优化

尾部追加元素:动画

 
1
2
3
4
5
// jQuery
$( '.el' ).append($( '<div/>' ));
 
// Native
document.querySelector( '.el' ).appendChild(document.createElement( 'div' ));

头部追加元素:

 
1
2
3
4
5
6
//jQuery
$(‘.el ').prepend(' <div></div> ')
 
//Native
var parent = document.querySelector(' .el');
parent.insertBefore( "<div></div>" ,parent.childNodes[0])

7.克隆元素

 
1
2
3
4
5
// jQuery
var clonedEl = $( '.el' ).clone();
 
// Native
var clonedEl = document.querySelector( '.el' ).cloneNode( true );

8.移除元素

 
1
2
3
4
5
6
7
8
9
10
11
12
Remove
// jQuery
$( '.el' ).remove();
 
// Native
remove( '.el' );
 
function remove(el) {
  var toRemove = document.querySelector(el);
 
  toRemove.parentNode.removeChild(toRemove);
}

9.获取父级元素

 
1
2
3
4
5
// jQuery
$( '.el' ).parent();
 
// Native
document.querySelector( '.el' ).parentNode;

10.获取上一个/下一个元素(Prev/next element)

 
1
2
3
4
5
6
7
// jQuery
$( '.el' ).prev();
$( '.el' ).next();
 
// Native
document.querySelector( '.el' ).previousElementSibling;
document.querySelector( '.el' ).nextElementSibling;

11.XHR and AJAX

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// jQuery
$.get( 'url' , function (data) {
 
});
$.post( 'url' , {data: data}, function (data) {
 
});
 
// Native
 
// get
var xhr = new XMLHttpRequest();
 
xhr.open( 'GET' , url);
xhr.onreadystatechange = function (data) {
 
}
xhr.send();
 
// post
var xhr = new XMLHttpRequest()
 
xhr.open( 'POST' , url);
xhr.onreadystatechange = function (data) {
 
}
xhr.send({data: data});

12.清空子元素

 
1
2
3
4
5
6
//jQuery
$( "#elementID" ).empty()
 
//Native
var element = document.getElementById( "elementID" )
while (element.firstChild) element.removeChild(element.firstChild);

13.检查是否有子元素

 
1
2
3
4
5
//jQuery
if (!$( "#elementID" ).is( ":empty" )){}
 
//Native
if (document.getElementById( "elementID" ).hasChildNodes()){}

14.$(document).ready

DOM加载完成,会触发DOMContentLoaded事件,等同于jQuery的$(document).ready方法。

 
1
2
3
document.addEventListener( "DOMContentLoaded" , function () {
   // ...
});

15.数据储存

jQuery对象能够储存数据。

 
1
$( "body" ).data( "foo" , 52);

HTML 5有一个dataset对象,也有相似的功能(IE 10不支持),不过只能保存字符串。

 
1
2
element.dataset.user = JSON.stringify(user);
element.dataset.score = score;

16.动画

jQuery的animate方法,用于生成动画效果。

 
1
$foo.animate( 'slow' , { x: '+=10px' }

jQuery的动画效果,很大部分基于DOM。可是目前,CSS 3的动画远比DOM强大,因此能够把动画效果写进CSS,而后经过操做DOM元素的class,来展现动画。

 
1
foo.classList.add( 'animate' )

若是须要对动画使用回调函数,CSS 3也定义了相应的事件。

 
1
2
el.addEventListener( "webkitTransitionEnd" , transitionEnded);
el.addEventListener( "transitionend" , transitionEnded);

 

替代方案

因为jQuery体积过大,替代方案层出不穷。

其中,最有名的是zepto.js。它的设计目标是以最小的体积,作到最大兼容jQuery的API。它的1.0版的原始大小是55KB,优化后是29KB,gzip压缩后为10KB。

若是不求最大兼容,只但愿模拟jQuery的基本功能。那么,min.js优化后只有200字节,而dolla优化后是1.7KB。

 此外,jQuery自己也采用模块设计,能够只选择使用本身须要的模块。具体作法参见jQuery的github网站,或者使用专用的Web界面

相关文章
相关标签/搜索