cari
Rumahhujung hadapan webtutorial js网站如何做到完全不需要jQuery也可以满足简单需求_jquery

jQuery 是现在最流行的 JavaScript 工具库。

据统计,目前全世界 57.3% 的网站使用它。也就是说,10 个网站里面,有 6 个使用 jQuery。如果只考察使用工具库的网站,这个比例就会上升到惊人的 91.7%。

如何做到 jQuery-free?

虽然 jQuery 如此受欢迎,但是它臃肿的体积也让人头痛不已。jQuery 2.0 的原始大小为 235KB,优化后为 81KB;如果是支持 IE6、7、8 的 jQuery 1.8.3,原始大小为 261KB,优化后为 91KB。

这样的体积,即使是宽带环境,完全加载也需要 1 秒或更长,更不要说移动设备了。这意味着,如果你使用了 jQuery,用户至少延迟 1 秒,才能看到网页效果。考虑到本质上,jQuery 只是一个操作 DOM 的工具,我们不仅要问:如果只是为了几个网页特效,是否有必要动用这么大的库?

如何做到 jQuery-free?

2006 年,jQuery 诞生的时候,主要用于消除不同浏览器的差异(主要是 IE6),为开发者提供一个简洁的统一接口。相比当时,如今的情况已经发生了很大的变化。IE 的市场份额不断下降,以 ECMAScript 为基础的 JavaScript 标准语法,正得到越来越广泛的支持。开发者直接使用 JavScript 标准语法,就能同时在各大浏览器运行,不再需要通过 jQuery 获取兼容性。

下面就探讨如何用 JavaScript 标准语法,取代 jQuery 的一些主要功能,做到 jQuery-free。

如何做到 jQuery-free?

一、选取 DOM 元素

jQuery 的核心是通过各种选择器,选中 DOM 元素,可以用 querySelectorAll 方法模拟这个功能。

复制代码 代码如下:
var $ = document.querySelectorAll.bind (document);

这里需要注意的是,querySelectorAll 方法返回的是 NodeList 对象,它很像数组(有数字索引和 length 属性),但不是数组,不能使用 pop、push 等数组特有方法。如果有需要,可以考虑将 Nodelist 对象转为数组。

复制代码 代码如下:
myList = Array.prototype.slice.call (myNodeList);

二、DOM 操作

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

尾部追加 DOM 元素。

复制代码 代码如下:

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

头部插入 DOM 元素。

复制代码 代码如下:

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

删除 DOM 元素。

复制代码 代码如下:

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

三、事件的监听

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

复制代码 代码如下:
Element.prototype.on = Element.prototype.addEventListener;

为了使用方便,可以在 NodeList 对象上也部署这个方法。

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

四、事件的触发

jQuery 的 trigger 方法则需要单独部署,相对复杂一些。

复制代码 代码如下:

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对象上也部署这个方法。

复制代码 代码如下:

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

五、document.ready

目前的最佳实践,是将 JavaScript 脚本文件都放在页面底部加载。这样的话,其实 document.ready 方法(jQuery 简写为$(function))已经不必要了,因为等到运行的时候,DOM 对象已经生成了。

六、attr 方法

jQuery 使用 attr 方法,读写网页元素的属性。

复制代码 代码如下:
$("#picture") .attr ("src", "http://url/to/image");

DOM 元素允许直接读取属性值,写法要简洁许多。

复制代码 代码如下:
$("#picture") .src = "http://url/to/image";

需要注意,input 元素的 this.value 返回的是输入框中的值,链接元素的 this.href 返回的是绝对 URL。如果需要用到这两个网页元素的属性准确值,可以用 this.getAttribute (‘value')和 this.getAttibute (‘href')。

七、addClass 方法

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

复制代码 代码如下:

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

DOM 元素本身有一个可读写的 className 属性,可以用来操作 class。

复制代码 代码如下:

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

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

复制代码 代码如下:

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

八、CSS

jQuery 的 css 方法,用来设置网页元素的样式。

复制代码 代码如下:
$(node) .css ( "color", "red" );

DOM 元素有一个 style 属性,可以直接操作。

复制代码 代码如下:

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

九、数据储存

jQuery 对象可以储存数据。

复制代码 代码如下:
$("body") .data ("foo", 52);

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

复制代码 代码如下:

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

十、Ajax

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

复制代码 代码如下:

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

我们可以定义一个 request 函数,模拟 Ajax 方法。

复制代码 代码如下:

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 函数,模拟 jQuery 的 get 和 post 方法。

复制代码 代码如下:

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



十一、动画

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

复制代码 代码如下:
$foo.animate ('slow', { x: '+=10px' });

jQuery 的动画效果,很大部分基于 DOM。但是目前,CSS 3 的动画远比 DOM 强大,所以可以把动画效果写进 CSS,然后通过操作 DOM 元素的 class,来展示动画。

复制代码 代码如下:
foo.classList.add ('animate');

如果需要对动画使用回调函数,CSS 3 也定义了相应的事件。

复制代码 代码如下:

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

十二、替代方案

由于 jQuery 体积过大,替代方案层出不穷。

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

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

此外,jQuery 本身采用模块设计,可以只选择使用自己需要的模块。具体做法参见它的 GitHub 网站,或者使用专用的 Web 界面

十三、参考链接

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

(完)

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Enjin JavaScript: Membandingkan PelaksanaanEnjin JavaScript: Membandingkan PelaksanaanApr 13, 2025 am 12:05 AM

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Beyond the Browser: JavaScript di dunia nyataBeyond the Browser: JavaScript di dunia nyataApr 12, 2025 am 12:06 AM

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Apr 11, 2025 am 08:23 AM

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

Cara Membina Aplikasi SaaS Multi-Tenant dengan Next.js (Integrasi Frontend)Cara Membina Aplikasi SaaS Multi-Tenant dengan Next.js (Integrasi Frontend)Apr 11, 2025 am 08:22 AM

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

JavaScript: meneroka serba boleh bahasa webJavaScript: meneroka serba boleh bahasa webApr 11, 2025 am 12:01 AM

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Evolusi JavaScript: Trend Semasa dan Prospek Masa DepanEvolusi JavaScript: Trend Semasa dan Prospek Masa DepanApr 10, 2025 am 09:33 AM

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

Demystifying JavaScript: Apa yang berlaku dan mengapa pentingDemystifying JavaScript: Apa yang berlaku dan mengapa pentingApr 09, 2025 am 12:07 AM

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Adakah Python atau JavaScript lebih baik?Adakah Python atau JavaScript lebih baik?Apr 06, 2025 am 12:14 AM

Python lebih sesuai untuk sains data dan pembelajaran mesin, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya, dan sesuai untuk analisis data dan pembangunan web. 2. JavaScript adalah teras pembangunan front-end. Node.js menyokong pengaturcaraan sisi pelayan dan sesuai untuk pembangunan stack penuh.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.