據統計
雖然jQuery如此受歡迎
這樣的體積
下面就探討如何用JavaScript標准語法
一
jQuery的核心是通過各種選擇器
var $ = document
querySelectorAll bind(document);
這裡需要注意的是
myList = Array
prototype slice call(myNodeList);
二
DOM本身就具有很豐富的操作方法
尾部追加DOM元素
// jQuery寫法
$(parent)append($(child)); // DOM寫法
parentappendChild(child)
頭部插入DOM元素
// jQuery寫法
$(parent)prepend($(child)); // DOM寫法
parentinsertBefore(child parent childNodes[ ])
刪除DOM元素
// jQuery寫法
$(child)remove() // DOM寫法
childparentNode removeChild(child)
三
jQuery的on方法
Element
prototype on = Element prototype addEventListener;
為了使用方便
NodeList
prototype on = function (event fn) {
[][forEach ] call(this function (el) {
elon(event fn);
});
return this;
};
四
jQuery的trigger方法則需要單獨部署
Element
prototype trigger = function (type data) {
var event = documentcreateEvent( HTMLEvents );
eventinitEvent(type true true);
eventdata = data || {};
eventeventName = type;
eventtarget = this;
thisdispatchEvent(event);
return this;
};
在NodeList對象上也部署這個方法
NodeList
prototype trigger = function (event) {
[][forEach ] call(this function (el) {
el[trigger ](event);
});
return this;
};
五
目前的最佳實踐
六
jQuery使用attr方法
$("#picture")
attr("src" "http://url/to/image");
DOM元素允許直接讀取屬性值
$("#picture")
src = "http://url/to/image";
需要注意
七
jQuery的addClass方法
$(
body ) addClass( hasJS );
DOM元素本身有一個可讀寫的className屬性
document
body className = hasJS ; // or
document
body className += hasJS ;
HTML
document
body classList add( hasJS ); document
body classList remove( hasJS ); document
body classList toggle( hasJS ); document
body classList contains( hasJS );
八
jQuery的css方法
$(node)
css( "color" "red" );
DOM元素有一個style屬性
element
style color = "red";; // or
element
style cssText += color:red ;
九
jQuery對象可以儲存數據
$("body")
data("foo" );
HTML
element
dataset user = JSON stringify(user); element
dataset score = score;
十
jQuery的Ajax方法
$
ajax({
type: "POST"
url: "somephp"
data: { name: "John"location: "Boston" }
})done(function( msg ) {
alert( "Data Saved: " + msg );
});
我們可以定義一個request函數
function request(type
url opts callback) { var xhr = new XMLHttpRequest();
if (typeof opts ===
function ) {
callback = opts;
opts = null;
}xhr
open(type url); var fd = new FormData();
if (type ===
POST && opts) {
for (var key in opts) {
fdappend(key JSON stringify(opts[key]));
}
}xhr
onload = function () {
callback(JSONparse(xhr response));
};xhr
send(opts ? fd : null); }
然後
var get = request
bind(this GET ); var post = request
bind(this POST );
十一
jQuery的animate方法
$foo
animate( slow { x: += px })
jQuery的動畫效果
foo
classList add( animate )
如果需要對動畫使用回調函數
el
addEventListener("webkitTransitionEnd" transitionEnded); el
addEventListener("transitionend" transitionEnded);
十二
由於jQuery體積過大
其中
如果不求最大兼容
此外
十三
(完)
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20562.html