Saya telah menelusuri Google dan mencari Stack Overflow untuk sementara waktu, tetapi saya tidak dapat mengatasi masalah ini.
Saya memiliki tabel HTML standar, berisi, katakanlah, buah. Seperti itu:
<table>
<tr>
<td>Apple</td>
<td>Green</td>
</tr>
<tr>
<td>Grapes</td>
<td>Green</td>
</tr>
<tr>
<td>Orange</td>
<td>Orange</td>
</tr>
</table>
Di atas ini saya memiliki kotak teks, yang ingin saya cari tabelnya sebagai tipe pengguna. Jadi, jika mereka mengetik Gre
misalnya, baris Oranye tabel akan menghilang, meninggalkan Apple dan Grapes. Jika mereka melanjutkan dan mengetik Green Gr
baris Apple harus menghilang, hanya menyisakan anggur. Saya harap ini jelas.
Dan, jika pengguna menghapus sebagian atau semua kueri mereka dari kotak teks, saya harus menyukai semua baris yang sekarang cocok dengan kueri untuk muncul kembali.
Sementara saya tahu cara menghapus baris tabel di jQuery, saya punya sedikit ide tentang bagaimana cara melakukan pencarian dan menghapus baris secara selektif berdasarkan ini. Apakah ada solusi sederhana untuk ini? Atau sebuah plugin?
Kalau ada yang bisa mengarahkan saya ke arah yang benar itu akan brilian.
Terima kasih.
sumber
Jawaban:
Saya membuat contoh-contoh ini.
Pencarian indexOf sederhana
Demo : http://jsfiddle.net/7BUmG/2/
Pencarian ekspresi reguler
Fungsionalitas yang lebih maju menggunakan ekspresi reguler akan memungkinkan Anda untuk mencari kata dalam urutan apa pun di baris. Ini akan bekerja sama jika Anda mengetik
apple green
ataugreen apple
:Demo : http://jsfiddle.net/dfsq/7BUmG/1133/
Debounce
Ketika Anda menerapkan pemfilteran tabel dengan pencarian lebih dari beberapa baris dan kolom, sangat penting bagi Anda untuk mempertimbangkan kinerja dan kecepatan / optimisasi pencarian. Cukup dengan mengatakan Anda tidak harus menjalankan fungsi pencarian pada setiap tombol, itu tidak perlu. Untuk mencegah pemfilteran berjalan terlalu sering, Anda harus menghapusnya. Contoh kode di atas akan menjadi:
Anda dapat memilih implementasi debounce, misalnya dari Lodash _.debounce , atau Anda dapat menggunakan sesuatu yang sangat sederhana seperti yang saya gunakan dalam demo berikutnya (debounce dari sini ): http://jsfiddle.net/7BUmG/6230/ dan http: / /jsfiddle.net/7BUmG/6231/ .
sumber
#table
keid
meja saya? Apakah perlu ada perubahan tambahan untuk bekerja dengan<thead>
dan<tbody>
tag? Saya telah memasukkan skrip dan html dari tautan jsfiddle, mengubah#id
, tetapi saya tidak mendapatkan pemfilteran.<tbody>
Anda harus mengubahnyavar $rows = $('#id-of-your-table tbody tr');
.<tr>
DOMElement dan string. Dengan cara ini, padakeyup()
Anda mencari string tersebut (yang mana lebih cepat) dan memiliki baris yang sesuai siap untuk dimanipulasi. Prosedur pengaturan pertama yang mahal kemudian harus dijalankan hanya sekali setelah memuat. Semua perubahan ini hanyalah perbaikan kecil, bagian tengah sebenarnya masih tetap seperti yang ditunjukkan dalam jawaban ini. Pendekatan ini juga mungkin dan cukup mudah untuk diterapkan tanpa jQuery.$('#table tr:not(:first)')
pemilih.Saya punya plugin jquery untuk ini. Ini menggunakan jquery-ui juga. Anda dapat melihat contoh di sini http://jsfiddle.net/tugrulorhan/fd8KB/1/
sumber
Berikut ini adalah solusi terbaik untuk mencari di dalam tabel HTML sambil menutupi semua tabel , (semua td, tr dalam tabel), javascript murni dan sesingkat mungkin:
sumber
Terima kasih @dfsq untuk kode yang sangat membantu!
Saya telah membuat beberapa penyesuaian dan mungkin beberapa yang lain juga menyukainya. Saya memastikan bahwa Anda dapat mencari beberapa kata, tanpa kecocokan yang ketat.
Baris contoh:
Anda bisa mencari 'ap pe' dan itu akan mengenali baris pertama
Anda bisa mencari 'pisang apel' dan itu akan mengenali baris kedua
Demo: http://jsfiddle.net/JeroenSormani/xhpkfwgd/1/
sumber
var $rows = $('#WorldPlayersTable tr');
ke -var $rows = $('#WorldPlayersTable tbody tr');
Saya menemukan jawaban dfsq komentarnya sangat berguna. Saya membuat beberapa modifikasi kecil yang berlaku untuk saya (dan saya mempostingnya di sini, kalau-kalau ada gunanya bagi orang lain).
class
sebagai kait, bukan elemen tabeltr
class
sambil menunjukkan / menyembunyikan orang tua$rows
elemen teks ke dalam array hanya sekali (dan menghindari$rows.length
perhitungan waktu)sumber
Solusi Javascript Murni:
sumber
Anda dapat menggunakan javascript asli seperti ini
sumber
Plugin JS yang dapat direkam juga merupakan salah satu alternatif yang baik untuk menerima fitur pencarian untuk tabel html
https://datatables.net/examples/basic_init/zero_configuration.html
sumber
Jika Anda dapat memisahkan html dan data, Anda dapat menggunakan perpustakaan eksternal seperti datatables atau yang saya buat. https://github.com/thehitechpanky/js-bootstrap-tables
Pustaka ini menggunakan fungsi keyup untuk memuat ulang tabledata dan karenanya berfungsi seperti pencarian.
sumber