亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

網(wǎng)站如何做到完全不需要jQuery也可以滿足簡單需求

2019-11-20 22:36:19
字體:
供稿:網(wǎng)友

jQuery 是現(xiàn)在最流行的 JavaScript 工具庫。

據(jù)統(tǒng)計,目前全世界 57.3% 的網(wǎng)站使用它。也就是說,10 個網(wǎng)站里面,有 6 個使用 jQuery。如果只考察使用工具庫的網(wǎng)站,這個比例就會上升到驚人的 91.7%。

如何做到 jQuery-free?

雖然 jQuery 如此受歡迎,但是它臃腫的體積也讓人頭痛不已。jQuery 2.0 的原始大小為 235KB,優(yōu)化后為 81KB;如果是支持 IE6、7、8 的 jQuery 1.8.3,原始大小為 261KB,優(yōu)化后為 91KB。

這樣的體積,即使是寬帶環(huán)境,完全加載也需要 1 秒或更長,更不要說移動設(shè)備了。這意味著,如果你使用了 jQuery,用戶至少延遲 1 秒,才能看到網(wǎng)頁效果??紤]到本質(zhì)上,jQuery 只是一個操作 DOM 的工具,我們不僅要問:如果只是為了幾個網(wǎng)頁特效,是否有必要動用這么大的庫?

如何做到 jQuery-free?

2006 年,jQuery 誕生的時候,主要用于消除不同瀏覽器的差異(主要是 IE6),為開發(fā)者提供一個簡潔的統(tǒng)一接口。相比當(dāng)時,如今的情況已經(jīng)發(fā)生了很大的變化。IE 的市場份額不斷下降,以 ECMAScript 為基礎(chǔ)的 JavaScript 標(biāo)準(zhǔn)語法,正得到越來越廣泛的支持。開發(fā)者直接使用 JavScript 標(biāo)準(zhǔn)語法,就能同時在各大瀏覽器運(yùn)行,不再需要通過 jQuery 獲取兼容性。

下面就探討如何用 JavaScript 標(biāo)準(zhǔn)語法,取代 jQuery 的一些主要功能,做到 jQuery-free。

如何做到 jQuery-free?

一、選取 DOM 元素

jQuery 的核心是通過各種選擇器,選中 DOM 元素,可以用 querySelectorAll 方法模擬這個功能。

復(fù)制代碼 代碼如下:
var $ = document.querySelectorAll.bind (document);

這里需要注意的是,querySelectorAll 方法返回的是 NodeList 對象,它很像數(shù)組(有數(shù)字索引和 length 屬性),但不是數(shù)組,不能使用 pop、push 等數(shù)組特有方法。如果有需要,可以考慮將 Nodelist 對象轉(zhuǎn)為數(shù)組。

復(fù)制代碼 代碼如下:
myList = Array.prototype.slice.call (myNodeList);

二、DOM 操作

DOM 本身就具有很豐富的操作方法,可以取代 jQuery 提供的操作方法。

尾部追加 DOM 元素。

復(fù)制代碼 代碼如下:

// jQuery 寫法
$(parent) .append ($(child));
// DOM 寫法
parent.appendChild (child)

頭部插入 DOM 元素。

復(fù)制代碼 代碼如下:

// jQuery 寫法
$(parent) .prepend ($(child));
// DOM 寫法
parent.insertBefore (child, parent.childNodes[0])

刪除 DOM 元素。

復(fù)制代碼 代碼如下:

// jQuery 寫法
$(child) .remove ()
// DOM 寫法
child.parentNode.removeChild (child)

三、事件的監(jiān)聽

jQuery 的 on 方法,完全可以用 addEventListener 模擬。

復(fù)制代碼 代碼如下:
Element.prototype.on = Element.prototype.addEventListener;

為了使用方便,可以在 NodeList 對象上也部署這個方法。

復(fù)制代碼 代碼如下:
NodeList.prototype.on = function (event, fn) {
[]['forEach'].call (this, function (el) {
el.on (event, fn);
});
return this;
};

四、事件的觸發(fā)

jQuery 的 trigger 方法則需要單獨部署,相對復(fù)雜一些。

復(fù)制代碼 代碼如下:

Element.prototype.trigger = function (type, data) {
var event = document.createEvent ('HTMLEvents');
event.initEvent (type, true, true);
event.data = data {};
event.eventName = type;
event.target = this;
this.dispatchEvent (event);
return this;
};

在NodeList對象上也部署這個方法。

復(fù)制代碼 代碼如下:

NodeList.prototype.trigger = function (event) {
[]['forEach'].call (this, function (el) {
el['trigger'](event);
});
return this;
};

五、document.ready

目前的最佳實踐,是將 JavaScript 腳本文件都放在頁面底部加載。這樣的話,其實 document.ready 方法(jQuery 簡寫為$(function))已經(jīng)不必要了,因為等到運(yùn)行的時候,DOM 對象已經(jīng)生成了。

六、attr 方法

jQuery 使用 attr 方法,讀寫網(wǎng)頁元素的屬性。

復(fù)制代碼 代碼如下:
$("#picture") .attr ("src", "http://url/to/image");

DOM 元素允許直接讀取屬性值,寫法要簡潔許多。

復(fù)制代碼 代碼如下:
$("#picture") .src = "http://url/to/image";

需要注意,input 元素的 this.value 返回的是輸入框中的值,鏈接元素的 this.href 返回的是絕對 URL。如果需要用到這兩個網(wǎng)頁元素的屬性準(zhǔn)確值,可以用 this.getAttribute (‘value')和 this.getAttibute (‘href')。

七、addClass 方法

jQuery 的 addClass 方法,用于為 DOM 元素添加一個 class。

復(fù)制代碼 代碼如下:

$('body') .addClass ('hasJS');

DOM 元素本身有一個可讀寫的 className 屬性,可以用來操作 class。

復(fù)制代碼 代碼如下:

document.body.className = 'hasJS';
// or
document.body.className += ' hasJS';

HTML 5 還提供一個 classList 對象,功能更強(qiáng)大(IE 9 不支持)。

復(fù)制代碼 代碼如下:

document.body.classList.add ('hasJS');
document.body.classList.remove ('hasJS');
document.body.classList.toggle ('hasJS');
document.body.classList.contains ('hasJS');

八、CSS

jQuery 的 css 方法,用來設(shè)置網(wǎng)頁元素的樣式。

復(fù)制代碼 代碼如下:
$(node) .css ( "color", "red" );

DOM 元素有一個 style 屬性,可以直接操作。

復(fù)制代碼 代碼如下:

element.style.color = "red";;
// or
element.style.cssText += 'color:red';

九、數(shù)據(jù)儲存

jQuery 對象可以儲存數(shù)據(jù)。

復(fù)制代碼 代碼如下:
$("body") .data ("foo", 52);

HTML 5 有一個 dataset 對象,也有類似的功能(IE 10 不支持),不過只能保存字符串。

復(fù)制代碼 代碼如下:

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

十、Ajax

jQuery 的 Ajax 方法,用于異步操作。

復(fù)制代碼 代碼如下:

$.ajax ({
type: "POST",
url: "some.php",
data: { name: "John", location: "Boston" }
}) .done (function ( msg ) {
alert ( "Data Saved: " + msg );
});

我們可以定義一個 request 函數(shù),模擬 Ajax 方法。

復(fù)制代碼 代碼如下:

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) {
fd.append (key, JSON.stringify (opts[key]));
}
}
xhr.onload = function () {
callback (JSON.parse (xhr.response));
};
xhr.send (opts ? fd : null);
}

然后,基于 request 函數(shù),模擬 jQuery 的 get 和 post 方法。

復(fù)制代碼 代碼如下:

var get = request.bind (this, 'GET');
var post = request.bind (this, 'POST');



十一、動畫

jQuery 的 animate 方法,用于生成動畫效果。

復(fù)制代碼 代碼如下:
$foo.animate ('slow', { x: '+=10px' });

jQuery 的動畫效果,很大部分基于 DOM。但是目前,CSS 3 的動畫遠(yuǎn)比 DOM 強(qiáng)大,所以可以把動畫效果寫進(jìn) CSS,然后通過操作 DOM 元素的 class,來展示動畫。

復(fù)制代碼 代碼如下:
foo.classList.add ('animate');

如果需要對動畫使用回調(diào)函數(shù),CSS 3 也定義了相應(yīng)的事件。

復(fù)制代碼 代碼如下:

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

十二、替代方案

由于 jQuery 體積過大,替代方案層出不窮。

其中,最有名的是 zepto.js。它的設(shè)計目標(biāo)是以最小的體積,做到最大兼容 jQuery 的 API。zepto.js 1.0 版的原始大小是 55KB,優(yōu)化后是 29KB,gzip 壓縮后為 10KB。

如果不求最大兼容,只希望模擬 jQuery 的基本功能,那么,min.js 優(yōu)化后只有 200 字節(jié),而 dolla 優(yōu)化后是 1.7KB。

此外,jQuery 本身采用模塊設(shè)計,可以只選擇使用自己需要的模塊。具體做法參見它的 GitHub 網(wǎng)站,或者使用專用的 Web 界面。

十三、參考鏈接

- Remy Sharp,I know jQuery. Now what?
- Hemanth.HM,Power of Vanilla JS
- Burke Holland,5 Things You Should Stop Doing With jQuery

(完)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲欧美日韩久久| 亚洲精品va| 久热综合在线亚洲精品| 又色又爽又高潮免费视频国产| 中文在线三区| 日韩高清在线观看一区二区| 一区二区三区免费网站| 国产一区二区在线视频播放| 日韩精品久久久| 91精品国产高清一区二区三蜜臀| 国产美女高潮在线观看| 91老司机福利在线| 91网址在线观看精品| 无遮挡动作视频在线观看免费入口| 97精品视频在线| 久久久国产成人| 国产一级片视频| 玖玖玖国产精品| 国产精品剧情在线亚洲| jizzjizzji欧美| 91免费版看片| 人善交video高清| 99视频在线播放| 黄色成人在线观看| 精品欧美国产一区二区三区| 91香蕉一区二区三区在线观看| 欧美在线一级片| 精品成人国产| 羞羞网www| 亚洲精品久久| 午夜私人影院久久久久| 91视频.com| 欧美极品aⅴ影院| 国产一区二区三区四区五区加勒比| 狠狠色成人综合网图片区| 亚洲三级电影网站| 亚洲女同中文字幕| 成人免费淫片在线费观看| 激情在线视频| 中文字幕在线观看视频一区| av在线免费播放| 成人在线观看免费高清| 美国av一区二区三区| 欧美v日韩v国产v| 国产二级片在线| 香蕉久久久久久av成人| 国模大尺度一区二区三区| 午夜视频免费播放| 四虎影视一区二区| 欧美精品久久久久久久小说| 亚洲男人的天堂在线aⅴ视频| 一级毛片精品毛片| 亚洲视屏在线观看| 国产成人无码一区二区在线观看| 免费在线a视频| 久久香蕉精品香蕉| 久久激情久久| 国产盗摄一区二区三区在线| 一本色道综合亚洲| 五月天丁香花婷婷| 91精品国自产在线观看| av成人手机在线| 高清不卡在线观看| 日本精品人妻无码77777| 一本大道综合伊人精品热热| 男人的天堂99| 日韩一级免费看| 一区二区精品免费视频| 国产探花在线免费观看| 欧美老女人xx| 国产日韩欧美综合精品| 欧美日本另类xxx乱大交| 亚洲人成人99网站| a4yy在线播放免费观看视频| 在线观看特色大片免费视频| 中文欧美日本在线资源| 亚洲mmav| 日韩欧美一中文字暮专区| 欧美伊人精品成人久久综合97| 国产精品日韩欧美大师| 亚洲中文字幕无码av| 欧洲精品亚洲精品| 艳母动漫在线免费观看| 很黄很污的网站| 日韩中文字幕在线精品| 国产丝袜在线观看视频| 我和岳m愉情xxxⅹ视频| 日韩中文字幕观看| 国产又粗又长又爽| 成人影院在线观看| 可以免费看的av毛片| 亚洲精品久久嫩草网站秘色| 欧美精品成人一区二区在线观看| 你懂的国产视频| 嫩草懂你的影院| 欧美 国产 综合| 麻豆精品蜜桃| 最新91视频| 国外男同性恋在线看| 91豆麻精品91久久久久久| 国产视频1区2区| 91午夜国产| 色www精品视频在线观看| 国产精品毛片a∨一区二区三区| 视频三区在线| 日韩精品一区在线视频| 亚洲精品66| 日韩精品视频在线免费观看| 天天看天天摸天天操| 日产国产高清一区二区三区| 性折磨bdsm欧美激情另类| 精品人妻大屁股白浆无码| 日本高清视频一区二区三区| 制服丝袜亚洲网站| 欧美体内谢she精2性欧美| 爱爱爱视频网站| 农村妇女精品一二区| 伊甸园精品99久久久久久| 俄罗斯精品一区二区三区| 嫩草影院在线观看未满十八| 一区二区三区| 加勒比视频一区| 日本韩国免费观看| 色网站在线播放| 天堂亚洲精品| 亚洲一二三四五| 在线视频欧美日韩精品| 欧美毛片在线观看| 91色porny蝌蚪| 亚洲电影激情视频网站| 性欧美xxxx视频在线观看| 欧美性色综合| 欧亚乱熟女一区二区在线| 三上悠亚在线观看视频| 中文人妻熟女乱又乱精品| 91极品视频在线| av一本久道久久波多野结衣| 精品免费视频一卡2卡三卡4卡不卡| 91免费看片网站| 国产精品久久久免费看| 亚洲狼人在线| 色先锋av资源在线| 国产亚洲人成a一在线v站| caoporn国产精品| 日韩欧美中文字幕电影| 3d动漫精品啪啪一区二区竹菊| 亚洲一区精品在线观看| 欧美日韩一二三区| 午夜欧美精品| 欧美日韩在线播放三区四区| 91国产高清在线| 成人永久免费| 囯产精品久久久久久| 黄色av免费在线观看| 国产91对白在线播放| 91视频免费在线看| 成人性色生活片免费看爆迷你毛片| 中文精品一区二区| 一级黄色在线播放| 91国偷自产中文字幕久久| 国产福利微拍精品一区二区| 中文字幕视频观看| 精品96久久久久久中文字幕无| 羞羞视频在线免费国产| 男人用嘴添女人下身免费视频| 777米奇影视第四色| 91亚洲国产成人精品一区| 草草视频在线免费观看| 日韩在线观看高清| 老司机一区二区| sese在线视频| 日韩视频免费观看高清| 色哟哟在线观看| 成人在线观看小视频| 国产欧美一区二区精品秋霞影院| bt欧美亚洲午夜电影天堂| 无码国产色欲xxxx视频| 日本成人在线一区| 亚洲性av网站| 67194成人在线观看| 欧美三级视频在线观看| 在线小视频你懂的| 国产乱子伦精品无码专区| 久久视频在线观看中文字幕| 国产精品电影观看| 亚洲第一天堂久久| 永久免费av在线| 99这里只有精品视频| 免费黄漫在线观看| 日韩免费一区二区三区| 国产美女18xxxx免费视频| 成人av网站在线观看| 久久精品在线观看| 卡通动漫亚洲综合| 尤物yw午夜国产精品视频| 在线免费观看av电影| 伊人精品视频在线观看| 999www成人| 亚洲一区二区三区涩| 久久久亚洲欧洲日产国码αv| 国产精品日韩精品欧美在线| 91精品成人久久| 久久国产精品亚洲人一区二区三区| 综合久久伊人| 日韩视频在线观看视频| 天使萌一区二区三区免费观看| 色婷婷综合久久| 国产又大又黄又粗又爽| 中文字幕av一区二区三区佐山爱| 亚洲尤物在线视频观看| www.污网站| 爱爱精品视频| 成人黄色免费网| 姬川优奈aav一区二区| 欧美日韩一区三区四区| 日本国产一区二区三区| 欧美bbbxxxxx| 99re6在线视频精品免费| 免费网站你懂的| 麻豆tv在线| 成人夜色视频网站在线观看| 最近中文字幕在线观看| 欧美性猛交xxxx乱大交3| 日韩欧美猛交xxxxx无码| 亚洲欧洲成人av每日更新| 四虎精品成人a在线观看| 日韩av电影免费播放| 欧美肥老太太性生活| 蜜桃传媒一区二区三区| 日本综合一区二区三区| 国内自拍中文字幕| 精人妻一区二区三区| 最新高清无码专区| 芒果视频成人app| 蜜乳av另类精品一区二区| 8x8x拔插拔插影库永久免费| 热99re久久精品这里都是免费| 国产日韩欧美第一页| 进去里视频在线观看| 精品国产自在精品国产浪潮| 爱爱视频免费在线观看| 欧美在线三区| 国产精品久久久久久av公交车| 亚洲欧美第一页| 亚洲一区二区不卡免费| 欧美精品亚洲精品日韩精品| 国产精品全国免费观看高清| 4438五月综合| 久久久亚洲福利精品午夜| 亚洲天堂av在线播放| 一区二区三区产品免费精品久久75| 成人片在线播放| 亚洲精品国产欧美| 色婷婷激情一区二区三区| 中文字幕免费高清电视剧网站在线观看| 影音先锋中文字幕第一页| 亚洲第一偷拍| 欧美日韩影视| 国产一区二区三区综合| 国内精品在线播放| 亚洲高清网站| 欧美精品一区在线观看| 色撸撸在线视频| 欧美三区在线视频| 国产精品偷乱一区二区三区| 三级av免费看| 羞羞色午夜精品一区二区三区| 国产乡下妇女三片| 97精品久久久中文字幕免费| 久草资源在线| 老司机午夜免费精品视频| 国产精品家庭影院| 大奶在线精品| 国产aⅴ爽av久久久久成人| 亚洲综合视频1区| 国产成人小视频| 日韩欧美另类一区二区| 伊人影院久久| 无码毛片aaa在线| 国产精品久久久久久久乖乖| 国产精品偷伦视频免费观看了| 亚洲韩国日本中文字幕| 欧美视频第一页| 亚洲第一黄色片| www.色就是色.com| 精品日本一区二区三区| 精品成人佐山爱一区二区| 日韩毛片高清在线播放| 天天综合网天天| 凹凸日日摸日日碰夜夜爽1| 午夜高潮免费视频| 日本天堂中文字幕| 黄色a级片免费看| 性猛交xxxx| 一区二区三区入口| 日韩成人免费观看| 亚洲黄色三级| 午夜av在线免费观看| 空姐吹箫视频大全| 亚洲精品久久久久久久久久久久久久| 亚洲人成网亚洲欧洲无码| 欧美中文在线| 久草在线网址| 波多野结衣在线免费观看| 国产精品.xx视频.xxtv| 国产精品入口麻豆免费观看| 国产一级大片在线观看| 国产999精品久久久久久绿帽| 精品成人a区在线观看| 国产精品一级久久久| 嫩草香蕉在线91一二三区| h片在线观看视频免费| 精品三级在线观看| 亚洲色图欧美制服丝袜另类第一页| 亚洲视频免费观看| 国产探花在线精品一区二区| 亚洲视频在线观看一区二区三区| gogogo高清在线观看免费完整版| 国内精品区一区二区三| 被下部羞羞漫画| 99riav国产精品视频| 日本亚洲欧洲精品| 超碰在线观看91| 印度美女freesex性hd| 91精品人妻一区二区三区| 国产精品亚洲一区二区三区在线| 在线观看成人免费| 久久久久久久久久影院|