


Teknik Location.hash untuk menyimpan teknik javascript_status halaman
Atribut cincang ialah rentetan yang boleh dibaca dan boleh ditulis yang merupakan bahagian utama URL (bahagian bermula dari tanda #).
Tatabahasa
lokasi.hash
Dalam projek kami, terdapat sejumlah besar borang pertanyaan ajax + halaman senarai hasil Memandangkan hasil pertanyaan dikembalikan oleh ajax, apabila pengguna mengklik item dalam senarai untuk memasuki halaman butiran, kemudian mengklik pelayar kembali. butang untuk kembali ke halaman Pertanyaan ajax, pada masa ini semua orang tahu bahawa bentuk dan hasil halaman pertanyaan telah kembali ke keadaan lalai.
Jika anda perlu memasukkan semula syarat pertanyaan setiap kali anda kembali ke halaman, atau perlu pergi ke halaman tertentu dalam senarai, maka pengguna benar-benar akan menjadi gila dengan pengalaman ini.
Dalam projek kami, kami menulis kelas asas JavaScript yang sangat mudah untuk mengendalikan location.hash untuk menyimpan keadaan halaman saya akan berkongsi dengan anda hari ini.
(Kandungan artikel ini mungkin agak sukar untuk pemula JavaScript kerana ia melibatkan pengetahuan berorientasikan objek JS, seperti menentukan kelas, warisan, kaedah maya, refleksi, dll.)
Mari kita lihat keperluan kita dahulu
Projek kami ialah sistem pengurusan tugasan H5 berdasarkan WeChat Prototaip halaman yang akan disiapkan adalah seperti yang ditunjukkan di bawah:
Keperluan harus sangat jelas, iaitu, klik pada borang pertanyaan, gunakan ajax untuk mengembalikan hasil pertanyaan, dan kemudian klik pada tugas dalam senarai untuk memasuki halaman butiran tugas. Memandangkan pentadbir (pengurus projek) biasanya mengendalikan berbilang tugas pada satu masa, mereka akan sentiasa bertukar antara halaman butiran tugas dan halaman senarai pertanyaan Pada masa ini, jika status halaman pertanyaan tidak dapat disimpan dengan menekan kekunci kembali, ia akan menjadi perlu untuk kembali ke halaman pertanyaan setiap kali Pengalaman memasuki semula syarat pertanyaan pasti tidak boleh diterima.
Jadi, kita perlu mencari cara untuk menyimpan status halaman supaya apabila pengguna menekan butang kembali, syarat pertanyaan dan keputusan masih ada.
Idea penyelesaian
Terdapat banyak idea untuk menyimpan status halaman, tetapi kami berpendapat menggunakan location.hash sepatutnya menjadi kaedah terbaik.
Ideanya adalah seperti berikut:
1. Selepas pengguna memasukkan syarat pertanyaan dan mengklik OK, kami menyerikan syarat pertanyaan ke dalam rentetan, menambah syarat pertanyaan pada penghujung url melalui "#" untuk mendapatkan url baharu, dan kemudian memanggil lokasi. replace(url baharu) untuk mengubah suai alamat dalam bar alamat penyemak imbas.
2. Apabila pengguna menekan butang belakang untuk kembali ke halaman pertanyaan, yang juga boleh dikatakan apabila halaman dimuatkan, nyahsiri lokasi.cincang ke dalam keadaan pertanyaan, kemudian kemas kini syarat pertanyaan kepada borang pertanyaan dan laksanakan pertanyaan.
Ideanya sangat mudah Perkara utama ialah kaedah location.replace Kaedah ini bukan sahaja mengubah suai URL bar alamat dalam penyemak imbas, tetapi yang lebih penting, menggantikan rekod halaman semasa dalam window.history. Jika kaedah location.replace tidak digunakan, setiap rollback akan kembali kepada keadaan pertanyaan sebelumnya. Sudah tentu, keperluan sedemikian mungkin berguna untuk beberapa projek.
Penyelesaian Akhir
Jika artikel ini hanya berkongsi idea penyelesaian di atas, ia tidak akan bernilai. Nilai artikel ini mestilah kelas JavaScript yang ringkas tetapi berkuasa yang kami tulis.
Jika anda memahami penyelesaian di atas, sila lihat kelas JavaScript mudah ini:
(function() { if (window.HashQuery) { return; } window.HashQuery = function() { }; HashQuery.prototype = { parseFromLocation: function() { if (location.hash === '' || location.hash.length === ) { return; } var properties = location.hash.substr().split('|'); var index = ; for (var p in this) { if (!this.hasOwnProperty(p) || typeof this[p] != 'string') { continue; } if (index < properties.length) { this[p] = properties[index]; if (this[p] === '-') { this[p] = ''; } } index++; } }, updateLocation: function() { var properties = []; for (var p in this) { if (!this.hasOwnProperty(p) || typeof this[p] != 'string') { continue; } var value = this[p]; properties.push(value === '' ? '-' : value); } var url = location.origin + location.pathname + location.search + "#" + properties.join('|'); location.replace(url); } }; })();
Kelas ini hanya mempunyai 2 kaedah. Kaedah HashQuery.parseFromLocation() menyahsiri tika subkelas HashQuery daripada location.hash dan kaedah HashQuery.updateLocation() menyeri dan mengemas kini tika subkelas HashQuery semasa ke tetingkap lokasi.
Anda boleh melihat bahawa kelas HashQuery tidak mempunyai sebarang atribut Itu kerana kami hanya menentukan kelas asas dan atribut kelas semuanya ditakrifkan dalam subkelas. Ini juga realistik, kerana syarat pertanyaan hanya mengetahui atribut yang ada pada halaman tertentu.
Selain itu, sila beri perhatian kepada pensirilan dan penyahserilan di sini. Pensirian di sini hanya menggunakan mekanisme refleksi JavaScript untuk memisahkan nilai semua atribut rentetan (mengikut urutan) contoh dengan "|" manakala bersiri adalah untuk memisahkan rentetan dengan "|" dan kemudian menggunakan refleksi untuk mengemas kini ia kepada contoh.
Cara menggunakan kelas HashQuery
Ia sangat mudah untuk digunakan.
Langkah pertama ialah mentakrifkan subkelas dan menambah syarat pertanyaan yang diperlukan pada atribut rentetan, seperti kod kami:
(function() { window.TaskSearchHashQuery = function () { HashQuery.constructor.call(this); this.iterationId = ''; this.assignedUserId = ''; this.status = ''; this.keyword = ''; }; TaskSearchHashQuery.constructor = TaskSearchHashQuery; TaskSearchHashQuery.prototype = new HashQuery(); })();
Langkah kedua ialah memanggil kaedah HashQuery.parseFromLocation() dan HashQuery.updateLocation() pada halaman pertanyaan. Kod di bawah ialah halaman pertanyaan lengkap kami:
(function() { var urls = { list: "/app/task/list" }; var hashQuery = null; var pager = null; $(document).ready(function () { hashQuery = new TaskSearchHashQuery(); hashQuery.parseFromLocation();//在这里调用的哦,从location反序列化object updateFormByHashQuery(); $("#btnSearch").click(function() { updateHashQueryByForm(); hashQuery.updateLocation();//在这里调用的哦,将查询条件序列化之后更新到location.hash $("#lblCount").html("加载中..."); pager.reload(); page.hideSearch(); }); pager = new ListPager("#listTasks", urls.list); pager.getPostData = function(index) { return "pageIndex=" + index + "&pageSize=" + "&projectId=" + page.projectId + "&iterationId=" + hashQuery.iterationId + "&assignedUserId=" + hashQuery.assignedUserId + "&status=" + hashQuery.status + "&keyword=" + hashQuery.keyword; }; pager.onLoaded = function() { $("#lblCount").html("共 " + $("#hfPagerTotalCount").val() + " 个任务"); $("#hfPagerTotalCount").remove(); }; pager.init(); }); function updateHashQueryByForm() { hashQuery.iterationId = $("#ddlIterations").val(); hashQuery.assignedUserId = $("#ddlUsers").val(); hashQuery.status = $("#ddlStatuses").val(); hashQuery.keyword = $("#txtKeyword").val(); }; function updateFormByHashQuery() { $("#ddlIterations").val(hashQuery.iterationId); $("#ddlUsers").val(hashQuery.assignedUserId); $("#ddlStatuses").val(hashQuery.status); $("#txtKeyword").val(hashQuery.keyword); }; })();
Ringkasan
Ini adalah semua pengetahuan tentang menggunakan location.hash untuk menyimpan keadaan halaman dalam projek kami. Saya tidak tahu bagaimana semua orang mengendalikan keperluan sedemikian dalam projek WEB mereka?
Kandungan di atas ialah teknik status halaman simpanan location.hash yang diperkenalkan oleh editor Saya harap ia akan membantu semua orang!

JavaScript adalah di tengah -tengah laman web moden kerana ia meningkatkan interaktiviti dan dinamik laman web. 1) Ia membolehkan untuk menukar kandungan tanpa menyegarkan halaman, 2) memanipulasi laman web melalui Domapi, 3) menyokong kesan interaktif kompleks seperti animasi dan drag-and-drop, 4) mengoptimumkan prestasi dan amalan terbaik untuk meningkatkan pengalaman pengguna.

C dan JavaScript mencapai interoperabilitas melalui webassembly. 1) Kod C disusun ke dalam modul WebAssembly dan diperkenalkan ke dalam persekitaran JavaScript untuk meningkatkan kuasa pengkomputeran. 2) Dalam pembangunan permainan, C mengendalikan enjin fizik dan rendering grafik, dan JavaScript bertanggungjawab untuk logik permainan dan antara muka pengguna.

JavaScript digunakan secara meluas di laman web, aplikasi mudah alih, aplikasi desktop dan pengaturcaraan sisi pelayan. 1) Dalam pembangunan laman web, JavaScript mengendalikan DOM bersama -sama dengan HTML dan CSS untuk mencapai kesan dinamik dan menyokong rangka kerja seperti JQuery dan React. 2) Melalui reaktnatif dan ionik, JavaScript digunakan untuk membangunkan aplikasi mudah alih rentas platform. 3) Rangka kerja elektron membolehkan JavaScript membina aplikasi desktop. 4) Node.js membolehkan JavaScript berjalan di sisi pelayan dan menyokong permintaan serentak yang tinggi.

Python lebih sesuai untuk sains data dan automasi, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python berfungsi dengan baik dalam sains data dan pembelajaran mesin, menggunakan perpustakaan seperti numpy dan panda untuk pemprosesan data dan pemodelan. 2. Python adalah ringkas dan cekap dalam automasi dan skrip. 3. JavaScript sangat diperlukan dalam pembangunan front-end dan digunakan untuk membina laman web dinamik dan aplikasi satu halaman. 4. JavaScript memainkan peranan dalam pembangunan back-end melalui Node.js dan menyokong pembangunan stack penuh.

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

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.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

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),
