cari
Rumahhujung hadapan webtutorial jsTiga minit untuk membawa anda melalui jQuery.noConflict()_jquery

jQuery ialah salah satu rangka kerja bahagian hadapan yang paling banyak digunakan, dan sejumlah besar perpustakaan dan pemalam pihak ketiga dibangunkan berdasarkannya. Untuk mengelakkan pencemaran ruang nama global, jQuery menyediakan kaedah jQuery.noConflict() untuk menyelesaikan konflik berubah. Kaedah ini, tanpa ragu, sangat berkesan. Malangnya, dokumentasi rasmi jQuery tidak menerangkan kaedah ini dengan cukup jelas, dan ramai pembangun tidak tahu apa sebenarnya yang berlaku apabila mereka memanggil jQuery.noConflict(), mengakibatkan banyak masalah apabila menggunakannya. Walaupun begitu, prinsip pelaksanaan di sebalik jQuery.noConflict() masih bernilai dipelajari dan dikuasai oleh pembangun web, dan ia boleh menjadi alat yang berkuasa untuk menyelesaikan masalah seperti pencemaran ruang nama global.

Apakah peranan jQuery.noConflict()?

jQuery.noConflict() wujud untuk satu tujuan sahaja: ia membenarkan anda memuatkan berbilang contoh jQuery pada halaman yang sama, terutamanya versi jQuery yang berbeza. Anda mungkin tertanya-tanya, mengapa anda perlu memuatkan/menggunakan pelbagai versi objek jQuery yang berbeza pada satu halaman? Secara umumnya, terdapat dua situasi. Dalam kes pertama, kod perniagaan anda menggunakan versi terkini pustaka jQuery, dan pemalam pihak ketiga yang anda pilih bergantung pada versi pustaka jQuery yang lebih awal, dalam kes kedua, anda mengekalkan sistem yang sudah ada; perniagaan Atas pelbagai sebab, kod tersebut merujuk versi lama perpustakaan jQuery, dan modul anda yang baru dibangunkan menggunakan versi lain pustaka jQuery. Dalam kedua-dua kes, anda perlu menghadapi masalah konflik objek/kaedah jQuery. Nasib baik, jQuery.noConflict() membantu anda menyelesaikan masalah ini.

Apa yang berlaku apabila jQuery dimuatkan?

Apabila jQuery dirujuk/dimuatkan oleh halaman, ia dirangkumkan dalam fungsi laksana sendiri (fungsi tanpa nama Semua pembolehubah, fungsi dan objek yang disediakannya berada dalam persekitaran boleh laku di dalam fungsi tanpa nama dan persekitaran luaran). tidak boleh Dipanggil untuk mengelakkan pencemaran ruang nama global.

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 

jQuery mentakrifkan dua objek global: jQuery dan $ di dalam fungsi tanpa nama, mendedahkan dirinya kepada persekitaran luaran. Pelbagai kaedah awam yang digunakan oleh pembangun diakses melalui dua objek ini, seperti jQuery.ajax(), jQuery.css(), dsb. Pada mulanya, mereka menunjuk ke objek yang sama jQuery (pembolehubah peribadi) di dalam fungsi tanpa nama, di mana pembolehubah dan fungsi peribadi di dalam fungsi tanpa nama diakses. Ini membolehkan pembolehubah peribadi dalaman dan fungsi fungsi tanpa nama masih berada dalam memori selepas ia dilaksanakan dan tidak akan dikosongkan oleh mekanisme pengumpulan sampah JavaScript.

window.jQuery = window.$ = jQuery; 

Apabila jQuery dimuatkan oleh halaman, halaman semasa mungkin sudah mempunyai dua pembolehubah global jQuery dan $ (contohnya, perpustakaan pihak ketiga yang lain dimuatkan, dan ia juga ditakrifkan secara dalaman), yang akan menyebabkan objek Sedia Ada ditimpa (pencemaran ruang nama global). Untuk menyelesaikan masalah ini, jQuery secara dalaman menyimpan pembolehubah global sedia ada dan menyimpannya dalam pembolehubah peribadi _jQuery dan _$ untuk panggilan seterusnya. Oleh itu, jika objek jQuery dan $ belum wujud apabila pustaka jQuery dimuatkan pada halaman, maka _jQuery dan _$ kedua-duanya tidak ditentukan jika tidak, mereka akan menyimpan rujukan kepada jQuery dan $ (mungkin dari pihak ketiga perpustakaan yang dirujuk sebelum ini) Atau versi perpustakaan jQuery yang berbeza). Selepas itu, jQuery akan menimpa dua pembolehubah global ini dan mendedahkan dirinya kepada persekitaran luaran seperti yang diterangkan di atas. Pada ketika ini, pembolehubah global jQuery dan $ pada halaman telah menunjuk kepada perpustakaan jQuery yang baru diperkenalkan.

// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
// Map over the $ in case of overwrite
_$ = window.$,
// Otherwise expose jQuery to the global object as usual
window.jQuery = window.$ = jQuery; 

Kesan ajaib jQuery.noConflict()?

Anggapkan bahawa sistem yang anda uruskan sudah merujuk versi 1.7.0 pustaka jQuery, dan anda merujuk versi 1.10.2 pustaka jQuery dalam fungsi yang baru ditambah. Jadi, adakah cara untuk menggunakan semula jQuery 1.7.0 atau menggunakan kedua-dua versi perpustakaan jQuery pada masa yang sama? Jawapannya ya, iaitu jQuery.noConflict(). Malah, menggunakan jQuery.noConflict(), anda boleh segera mengubah hala pembolehubah global jQuery dan $ ke objek yang dirujuk sebelum ini. Menakjubkan, bukan? Inilah sebabnya mengapa jQuery secara dalaman menyimpan objek yang dirujuk sebelum ini sebelum mendedahkan dirinya kepada dunia luar.

jQuery.noConflict() menerima parameter Boolean pilihan, biasanya nilai lalai adalah palsu. Apakah kesan yang akan diberikan oleh parameter ini? Sebenarnya, ia sangat mudah. Jika jQuery.noConflict() atau jQuery.noConflict(false) dipanggil, hanya pembolehubah global $ akan ditetapkan semula kepada nilai rujukan sebelumnya jika jQuery.noConflict() atau jQuery.noConflict(true) dipanggil, maka pembolehubah global; $ akan ditetapkan semula kepada nilai rujukan sebelumnya, kedua-dua jQuery dan $ akan ditetapkan semula kepada nilai rujukan sebelumnya. Ini sangat penting dan disyorkan untuk diingati. Apabila anda memanggil jQuery.noConflict(false/true), ia akan mengembalikan contoh jQuery semasa Menggunakan ciri ini, kami boleh menamakan semula jQuery.

// "Renaming" jQuery
var jayquery = jQuery.noConflict( true );
// Now we can call things like jayquery.ajax(), jayquery.css(), and so on

Mari kita lihat coretan kod lain untuk menguji sama ada kita benar-benar memahami noConflict() yang ajaib

<!-- jQuery and $ are undefined -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<!-- jQuery and $ now point to jQuery 1.10.2 -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js">
<!-- jQuery and $ now point to jQuery 1.7.0 -->
<script>jQuery.noConflict();</script>
<!-- jQuery still points to jQuery 1.7.0; $ now points to jQuery 1.10.2 -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js">
<!-- jQuery and $ now point to jQuery 1.6.4 -->
<script>var jquery164 = jQuery.noConflict( true );</script>
<!-- jQuery now points to jQuery 1.7.0; $ now points to jQuery 1.10.2; jquery164 points to jQuery 1.6.4 --> 

避免第三方库的冲突

以上的代码片段展示了如何解决多版本jQuery的冲突。接下来,我们尝试解决jQuery库和第三方库的冲突,下面出现的代码片段在jQuery的官方文档中都有,有兴趣的程序猿可以仔细阅读官方文档体会其中的区别。

直接使用No-Conflict模式

使用No-Conflict模式,其实就是对jQuery进行重命名,再调用。

<!-- 采用no-conflict模式,jquery.js在prototype.js之后被引入. -->
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
var $j = jQuery.noConflict();
// $j 引用了jQuery对象本身.
$j(document).ready(function() {
$j( "div" ).hide();
});
// $ 被重新指向prototype.js里定义的对象
// document.getElementById(). mainDiv below is a DOM element, not a jQuery object.
window.onload = function() {
var mainDiv = $( "main" );
}
</script> 

使用自执行函数封装

使用这种方式,你可以在匿名函数内部继续使用标准的$对象,这也是众多jQuery插件采用的方法。需要注意的是,使用这种方法,函数内部无法再使用prototype.js定义的$对象了。

<!-- jquery.js在prototype.js之后被引入. -->
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
jQuery.noConflict();
(function( $ ) {
// Your jQuery code here, using the $
})( jQuery );
</script> 

使用标准jQuery(document).ready()函数

如果jQuery库在其它库之前引入,那么jQuery内部定义的jQuery和$会被第三方库覆盖,这时候再使用noConflict()已经没有什么意义了。解决的方法很简单,直接使用jQuery的标准调用方式。

<!-- jquery.js在prototype.js之前被引入. -->
<script src="jquery.js"></script>
<script src="prototype.js"></script>
<script>
// Use full jQuery function name to reference jQuery.
jQuery( document ).ready(function() {
jQuery( "div" ).hide();
});
// 或者
jQuery(function($){
// Your jQuery code here, using the $
});
// Use the $ variable as defined in prototype.js
window.onload = function() {
var mainDiv = $( "main" );
};
</script>

下面给大家介绍jQuery noConflict() 方法

noConflict() 方法会释放会 $ 标识符的控制,这样其他脚本就可以使用它了。

实例

当然,您仍然可以通过全名替代简写的方式来使用 jQuery:

$.noConflict();
jQuery(document).ready(function(){
jQuery("button").click(function(){
jQuery("p").text("jQuery 仍在运行!");
});
});

实例

您也可以创建自己的简写。noConflict() 可返回对 jQuery 的引用,您可以把它存入变量,以供稍后使用。请看这个例子:

var jq = $.noConflict();
jq(document).ready(function(){
jq("button").click(function(){
jq("p").text("jQuery 仍在运行!");
});
});

实例

如果你的 jQuery 代码块使用 $ 简写,并且您不愿意改变这个快捷方式,那么您可以把 $ 符号作为变量传递给 ready 方法。这样就可以在函数内使用 $ 符号了 - 而在函数外,依旧不得不使用 "jQuery":

$.noConflict();
jQuery(document).ready(function($){
$("button").click(function(){
$("p").text("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
Memahami Enjin JavaScript: Butiran PelaksanaanMemahami Enjin JavaScript: Butiran PelaksanaanApr 17, 2025 am 12:05 AM

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python vs JavaScript: Keluk Pembelajaran dan Kemudahan PenggunaanPython vs JavaScript: Keluk Pembelajaran dan Kemudahan PenggunaanApr 16, 2025 am 12:12 AM

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Python vs JavaScript: Komuniti, Perpustakaan, dan SumberPython vs JavaScript: Komuniti, Perpustakaan, dan SumberApr 15, 2025 am 12:16 AM

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Dari C/C ke JavaScript: Bagaimana semuanya berfungsiDari C/C ke JavaScript: Bagaimana semuanya berfungsiApr 14, 2025 am 12:05 AM

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

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

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)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual