Saya menggunakan Bootstrap dan yang berikut ini tidak berfungsi:
<tbody>
<a href="#">
<tr>
<td>Blah Blah</td>
<td>1234567</td>
<td>£158,000</td>
</tr>
</a>
</tbody>
html
html-table
bootstrap-4
pengguna1038814
sumber
sumber
Jawaban:
Catatan penulis I:
Silakan lihat jawaban lain di bawah ini, terutama yang tidak menggunakan jquery.
Catatan penulis II:
Diawetkan untuk anak cucu tetapi pasti pendekatan yang salah pada tahun 2020. (Apakah non idiomatik bahkan kembali pada 2017)
Jawaban Asli
Anda menggunakan Bootstrap yang berarti Anda menggunakan jQuery: ^), jadi salah satu cara untuk melakukannya adalah:
Tentu saja Anda tidak harus menggunakan href atau berpindah lokasi, Anda dapat melakukan apa pun yang Anda suka di fungsi pengendali klik. Baca terus
jQuery
dan cara menulis penangan;Keuntungan menggunakan class over id adalah Anda dapat menerapkan solusi ke beberapa baris:
dan basis kode Anda tidak berubah. Pawang yang sama akan mengurus semua baris.
Pilihan lain
Anda dapat menggunakan Bootstrap jQuery callback seperti ini (dalam
document.ready
panggilan balik):Ini memiliki keuntungan karena tidak diatur ulang pada penyortiran tabel (yang terjadi dengan opsi lain).
Catatan
Karena ini telah diposting
window.document.location
sudah usang (atau paling tidak usang) digunakanwindow.location
sebagai gantinya.sumber
href
atribut pada atr
, karena itu bukan atribut yang valid untuk elemen ini. Gunakan atribut data sebagai gantinya:data-url="{linkurl}"
dan dalam kode js:$(this).data('url')
clickable_row
(CamelCase bertentangan dengan standar HTML dan harus huruf kecil (saya punya masalah dengan lintas browser beberapa kali dengan ini)) dan kemudian jQuery adalah$('.clickable_row tr').click(function ...
But Anda benar-benar harus menggunakandata-
untuk menyimpan data, daripadahref
karena itu adalah spesifikasi untuk data khusus.data-url
dan jquery akan mengaksesnya seperti$(this).data(url);
a
tag dengandisplay: block;
di dalam setiap sel agak menjengkelkan tetapi sepertinya cara yang paling bermanfaat untuk menyelesaikan masalah ini.Kamu tidak bisa melakukan itu Ini adalah HTML yang tidak valid. Anda tidak dapat menempatkan
<a>
di antara a<tbody>
dan a<tr>
. Coba ini sebagai gantinya:tambahkan gaya untuk tampilan penunjuk
Saat mengerjakannya, Anda ingin menggunakan JavaScript untuk menetapkan penangan klik di luar HTML.
sumber
<a>
di dalam baris yang diklik. (Itu juga akan menurunkan anggun)onClick={() => window.open('https://stackoverflow.com/', '_blank')}
Anda dapat menyertakan jangkar di dalam setiap
<td>
, seperti:Anda kemudian dapat menggunakan
display:block;
jangkar untuk membuat baris penuh dapat diklik.Contoh jsFiddle di sini.
Ini mungkin seoptimal yang Anda dapatkan kecuali Anda menggunakan JavaScript.
sumber
tabindex="-1"
di semua kecuali<td>
tautan pertama , sehingga tab pengguna baris ke baris, bukan sel ke sel. Plus, Anda masih dapat menyorot / menguraikan seluruh baris jika Anda ingin menggunakan:focus-within
pseudo-class CSS.Baris tabel tertaut dimungkinkan, tetapi tidak dengan
<table>
elemen standar . Anda dapat melakukannya menggunakandisplay: table
properti style. Di sini dan di sini ada beberapa biola untuk ditunjukkan.Kode ini harus melakukan trik:
Perhatikan bahwa peran ARIA diperlukan untuk memastikan aksesibilitas yang tepat karena
<table>
elemen standar tidak digunakan. Anda mungkin perlu menambahkan peran tambahan sepertirole="columnheader"
jika berlaku. Cari tahu lebih lanjut di panduan di sini.sumber
/
Kunci di Firefox), navigasi (tab
kunci), Salin lokasi tautan, Buka di tab / jendela baru, dll. Bahkan untuk dapat diakses / khusus membutuhkan browser. Nitpick saya satu-satunya adalah bahwa saya tidak akan membuat sarang<div>
di dalam<a>
, jadi sel-sel akan lebih baik ditandai sebagai<span>
._tables.scss
dan beberapa potongan acak lainnya, menggantikan semua kemunculan elemen tabel dengan kelas CSS yang saya pilih untuk digunakan (yang hanya sama dengan elemen:th
→.th
) Tidak banyak pekerjaan dibandingkan dengan manfaatnya, sungguh .<table>
ada karena suatu alasan. Tapi ini masih mengalahkan semua solusi javascript :)Dicapai dengan menggunakan Bootstrap 4.3+ standar sebagai berikut - tidak perlu jQuery atau kelas css tambahan!
Kuncinya adalah untuk digunakan
stretched-link
pada teks di dalam sel dan mendefinisikan<tr>
sebagai blok yang berisi.Anda dapat mendefinisikan mengandung blok dengan berbagai cara misalnya pengaturan
transform
ke nilai tidak ada (seperti contoh di atas).Untuk informasi lebih lanjut baca di sini dokumentasi Bootstrap untuk
stretched-link
.sumber
scope="row"
? Saya tidak menggunakan ruang lingkup dan baris masih berlaku sebagai tautan.scope="row"
- silakan periksa riwayatnya jika Anda ingin melihat apa lagi yang telah diedit. Saya tidak mengembalikan suntingan, karena potongan kode tampaknya berfungsi (seperti yang asli) dan saya tidak mendapatkan kesempatan untuk menguji kode baru secara menyeluruh :-)tr
tag yang tidak dikenali sebagai aturan untuk blok yang berisi di antara browser ... stackoverflow.com/questions/61342248/…stretched-link
.Solusi yang jauh lebih fleksibel adalah menargetkan apa pun dengan atribut data-href. Ini adalah Anda dapat menggunakan kembali kode dengan mudah di tempat yang berbeda.
Kemudian di jQuery Anda, targetkan saja elemen apa saja dengan atribut itu:
Dan jangan lupa memberi style pada css Anda:
Sekarang Anda dapat menambahkan atribut data-href ke elemen apa pun dan itu akan berfungsi. Ketika saya menulis cuplikan seperti ini, saya ingin mereka fleksibel. Jangan ragu untuk menambahkan solusi vanilla js ke ini jika Anda memilikinya.
sumber
Anda dapat menggunakan komponen bootstrap ini:
http://jasny.github.io/bootstrap/javascript/#rowlink
Jasny Bootstrap
Komponen yang hilang untuk kerangka front-end favorit Anda.
Pemakaian
Melalui atribut data
Tambahkan kelas
.rowlink
dan atributdata-link="row"
ke elemen<table>
atau<tbody>
. Untuk opsi lain tambahkan nama ke data-, seperti dalamdata-target="a.mainlink"
sel dapat dikecualikan dengan menambahkan.rowlink-skip
kelas ke<td>
.Melalui JavaScript
Panggil topeng input melalui javascript:
sumber
Ada cara yang baik untuk melakukannya secara teknis dengan
<a>
tag di dalam<tr>
, yang mungkin secara semantik salah (mungkin memberi Anda peringatan browser), tetapi akan berfungsi tanpaJavaScript/jQuery
diperlukan:PS: Perhatikan triknya di sini adalah menempatkan
<a>
tag sebagai elemen terakhir, jika tidak maka akan mencoba mengambil ruang<td>
sel pertama .PPS: Sekarang seluruh baris Anda akan dapat diklik dan Anda dapat menggunakan tautan ini untuk membuka tab baru juga (Ctrl / CMD + klik)
sumber
<tr>
unsur-unsur tidak dapat memiliki<a>
unsur sebagai seorang anak. Hanya<td>
dan<th>
anak-anak berlaku. Lihat: stackoverflow.com/questions/12634715/…Anda dapat menggunakan metode javascript onclick di tr dan membuatnya dapat diklik, juga jika Anda perlu membuat tautan karena beberapa detail, Anda dapat mendeklarasikan fungsi dalam javascript dan memanggilnya di onclick, meneruskan beberapa nilai.
sumber
Berikut ini caranya dengan meletakkan elemen A transparan di atas baris tabel. Keuntungannya adalah:
Kekurangan:
Tabel tetap seperti ini:
Tambahkan tautan (untuk setiap baris) melalui JavaScript jQuery dengan memasukkan elemen A ke dalam setiap kolom pertama dan mengatur properti yang diperlukan:
Pengaturan lebar dan tinggi bisa rumit, jika banyak bantalan dan margin digunakan, tetapi secara umum beberapa piksel mati seharusnya tidak masalah.
Demo langsung di sini: http://jsfiddle.net/qo0dx0oo/ (berfungsi di Firefox, tetapi tidak untuk IE atau Chrome, tautannya salah)
Tetap untuk Chrome dan IE (masih berfungsi di FF juga): http://jsfiddle.net/qo0dx0oo/2/
sumber
onmouseover
Anda dapat menambahkan peran tombol ke baris tabel dan Bootstrap akan mengubah kursor tanpa perubahan css. Saya memutuskan untuk menggunakan peran itu sebagai cara untuk dengan mudah membuat baris yang dapat diklik dengan kode yang sangat sedikit.
Html
jQuery
Anda dapat menerapkan prinsip yang sama ini untuk menambahkan peran tombol ke tag apa pun.
sumber
Inilah solusi sederhana ..
sumber
Kode di bawah ini akan membuat seluruh tabel Anda dapat diklik. Mengklik tautan dalam contoh ini akan menampilkan tautan dalam dialog peringatan alih-alih mengikuti tautan.
HTML:
Inilah HTML di belakang contoh di atas:
CSS
Dan CSS:
JQuery
Dan akhirnya jQuery yang membuat keajaiban terjadi:
Apa yang dilakukan adalah ketika baris diklik, pencarian dilakukan untuk href milik jangkar. Jika ditemukan, lokasi jendela diatur ke href itu.
sumber
Pilihan yang sangat mudah hanya menggunakan klik, dan lebih benar, menurut saya, karena ini memisahkan tampilan dan pengontrol, dan Anda tidak perlu membuat kode URL yang keras atau apa pun yang perlu Anda lakukan dengan mengklik. . Ini bekerja dengan Angular ng-klik juga.
Contohnya bekerja di sini
sumber
Pilihan lain menggunakan
<a>
, posisi CSS dan beberapa jQuery atau JS :HTML:
CSS:
Maka Anda harus memberikan lebar, menggunakan misalnya jQuery:
sumber
Saya tahu seseorang telah menulis hampir sama, namun cara saya adalah cara yang benar (div tidak bisa menjadi anak A) dan juga lebih baik menggunakan kelas.
Anda bisa meniru tabel menggunakan CSS dan membuat elemen A baris
css:
sumber
saya lebih suka menggunakan
onclick=""
atribut karena mudah digunakan dan dimengerti untuk pemula sepertisumber
Jawaban yang diterima bagus, tetapi saya mengusulkan alternatif kecil jika Anda tidak ingin mengulangi url pada setiap tr. Jadi Anda meletakkan url atau href di tabel data-url dan bukan tr.
Ini juga bagus karena Anda tidak perlu menambahkan atribut data klik ke setiap tr. Hal baik lainnya adalah kita tidak menggunakan kelas untuk memicu klik karena kelas hanya benar-benar digunakan untuk styling.
sumber
Salah satu solusi yang tidak disebutkan sebelumnya adalah menggunakan tautan tunggal dalam sel dan beberapa CSS untuk memperluas tautan ini di atas sel:
sumber
Sementara solusi utama di sini sangat bagus, solusi saya menghilangkan kebutuhan akan kelas. Yang perlu Anda lakukan adalah menambahkan atribut data-href dengan URL di dalamnya.
sumber
Saya telah menginvestasikan banyak waktu untuk memecahkan masalah ini.
Ada 3 pendekatan:
Gunakan JavaScript. Kelemahan yang jelas: tidak mungkin untuk membuka tab baru secara asli, dan ketika melayang di atas baris tidak akan ada indikasi pada bilah status seperti yang dimiliki tautan biasa. Aksesibilitas juga merupakan pertanyaan.
Gunakan HTML / CSS saja. Ini berarti menempatkan
<a>
sarang di bawah masing-masing<td>
. Pendekatan sederhana seperti biola ini tidak berfungsi - Karena permukaan yang dapat diklik tidak harus sama untuk setiap kolom. Ini adalah masalah UX yang serius. Juga, jika Anda membutuhkannya<button>
di baris, itu bukan HTML yang valid untuk membuat sarangnya<a>
tag (meskipun browser tidak masalah dengan itu).Saya telah menemukan 3 cara lain untuk menerapkan pendekatan ini. Pertama tidak apa-apa, dua lainnya tidak bagus.
a) Lihatlah contoh ini :
Ini berfungsi, tetapi karena adanya ketidakkonsistenan antara Chrome dan Firefox, ini memerlukan peramban khusus peramban untuk mengatasi perbedaan. Chrome juga akan selalu menyelaraskan konten sel ke atas, yang dapat menyebabkan masalah dengan teks yang panjang, terutama jika berbagai ketinggian garis terlibat.
b) Pengaturan
<td>
untuk{ display: contents; }
. Ini mengarah ke 2 masalah lain:b1. Jika orang lain mencoba menata
<td>
tag secara langsung , seperti mengaturnya{ width: 20px; }
, kita perlu meneruskan gaya itu ke<a>
tag tersebut. Kami membutuhkan beberapa sihir untuk melakukan itu, mungkin lebih banyak sihir daripada di alternatif Javascript.b2.
{ display: contents; }
masih eksperimental; khusus itu tidak didukung di Edge.c) Pengaturan
<td>
untuk{ height: --some-fixed-value; }
. Ini tidak cukup fleksibel.Pendekatan terakhir, yang saya rekomendasikan untuk dipikirkan secara serius, adalah tidak menggunakan baris yang dapat diklik sama sekali . Baris yang dapat diklik bukanlah pengalaman UX yang hebat: tidak mudah untuk secara visual menandai mereka sebagai dapat diklik, dan itu menimbulkan tantangan ketika beberapa bagian dapat diklik dalam baris, seperti tombol. Jadi alternatif yang bisa dilakukan adalah dengan memiliki
<a>
tag hanya pada kolom pertama, ditampilkan sebagai tautan biasa, dan berikan peran untuk menavigasi seluruh baris.sumber
Ini cara lain ...
HTML:
JQuery:
sumber
Ganti # dengan url,
tabindex="0"
buat elemen apa pun menjadi fokussumber
Anda bisa memberi baris id, misalnya
<tr id="special"> ... </tr>
dan kemudian gunakan jquery untuk mengatakan sesuatu seperti:
$('#special').onclick(function(){ window="http://urltolinkto.com/x/y/z";})
sumber
Mengapa kita tidak menggunakan tag "div" ....
sumber