Baru-baru ini saya telah membaca semakin banyak tentang orang-orang yang menggunakan atribut khusus dalam tag HTML mereka, terutama untuk tujuan menanamkan beberapa bit data tambahan untuk digunakan dalam kode javascript.
Saya berharap dapat mengumpulkan umpan balik tentang apakah menggunakan atribut khusus atau tidak adalah praktik yang baik, dan juga apa beberapa alternatifnya.
Sepertinya itu benar-benar dapat menyederhanakan baik sisi server dan kode sisi klien, tetapi juga tidak sesuai W3C.
Haruskah kita memanfaatkan atribut HTML khusus di aplikasi web kita? Mengapa atau mengapa tidak?
Bagi mereka yang menganggap atribut khusus adalah hal yang baik: apa sajakah hal yang perlu diingat ketika menggunakannya?
Bagi mereka yang menganggap atribut khusus adalah hal yang buruk: alternatif apa yang Anda gunakan untuk mencapai sesuatu yang serupa?
Pembaruan: Saya lebih tertarik pada alasan di balik berbagai metode, serta poin mengapa satu metode lebih baik dari yang lain. Saya pikir kita semua dapat menemukan 4-5 cara berbeda untuk mencapai hal yang sama. (elemen tersembunyi, skrip sebaris, kelas tambahan, parsing info dari id, dll).
Pembaruan 2: Tampaknya data-
fitur atribut HTML 5 memiliki banyak dukungan di sini (dan saya cenderung setuju, sepertinya opsi yang solid). Sejauh ini saya belum melihat banyak cara bantahan untuk saran ini. Apakah ada masalah / jebakan yang perlu dikhawatirkan dalam menggunakan pendekatan ini? Atau itu hanya validasi 'tidak berbahaya' dari spesifikasi W3C saat ini?
Jawaban:
HTML 5 secara eksplisit memungkinkan atribut khusus yang dimulai dengan
data
. Jadi, misalnya,<p data-date-changed="Jan 24 5:23 p.m.">Hello</p>
valid. Karena secara resmi didukung oleh standar, saya pikir ini adalah opsi terbaik untuk atribut khusus. Dan itu tidak mengharuskan Anda untuk membebani atribut lainnya dengan peretasan, sehingga HTML Anda dapat tetap semantik.Sumber: http://www.w3.org/TR/html5/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes
sumber
Inilah teknik yang saya gunakan baru-baru ini:
Objek komentar terkait dengan elemen induk (mis. #Someelement).
Inilah pengurai: http://pastie.org/511358
Untuk mendapatkan data untuk elemen tertentu, cukup panggil
parseData
dengan referensi ke elemen yang diteruskan sebagai satu-satunya argumen:Itu bisa lebih ringkas dari itu:
Akses:
Satu-satunya kelemahan menggunakan ini adalah tidak dapat digunakan dengan elemen self-closing (mis.
<img/>
), Karena komentar harus berada dalam elemen untuk dipertimbangkan sebagai data elemen itu.EDIT :
Manfaat penting dari teknik ini:
Berikut kode parser (disalin dari tautan http://pastie.org/511358 di atas, kalau-kalau kode tersebut tidak tersedia di pastie.org):
sumber
Anda dapat membuat atribut apa pun jika Anda menentukan skema untuk halaman Anda.
Sebagai contoh:
Tambahkan ini
Facebook (bahkan tag)
sumber
Cara termudah untuk menghindari penggunaan atribut khusus adalah dengan menggunakan atribut yang ada.
menggunakan nama kelas yang bermakna dan relevan.
Misalnya, lakukan sesuatu seperti:
type='book'
dantype='cd'
, untuk mewakili buku dan CD. Kelas jauh lebih baik untuk mewakili apa sesuatu IS .misalnya
class='book'
Saya telah menggunakan atribut khusus di masa lalu, tetapi jujur, sebenarnya tidak ada kebutuhan untuk itu jika Anda menggunakan atribut yang ada dengan cara yang secara semantik bermakna.
Untuk memberikan contoh yang lebih konkret, katakanlah Anda memiliki situs yang memberikan tautan ke berbagai jenis toko. Anda dapat menggunakan yang berikut ini:
styling css dapat menggunakan kelas-kelas seperti:
Dalam contoh di atas kita melihat bahwa keduanya adalah tautan ke toko (berbeda dengan tautan lain yang tidak terkait di situs) dan satu adalah toko cd, dan yang lainnya adalah toko buku.
sumber
Sematkan data dalam dom dan gunakan metadata untuk jQuery .
Semua plug-in yang baik mendukung plugin metadata (memungkinkan per opsi tag).
Ini juga memungkinkan struktur data / data yang sangat rumit, serta pasangan nilai kunci.
ATAU
ATAU
Kemudian dapatkan data seperti:
sumber
Saya melihat tidak ada masalah dalam menggunakan fitur XHTML yang ada tanpa merusak apa pun atau memperluas namespace Anda. Mari kita lihat contoh kecil:
Bagaimana cara menambahkan informasi tambahan ke some_content tanpa atribut tambahan? Bagaimana dengan menambahkan tag lain seperti yang berikut ini?
Itu membuat hubungan melalui id / ekstensi "_extended" yang ditentukan dengan baik dari pilihan Anda dan dengan posisinya dalam hierarki. Saya sering menggunakan pendekatan ini bersama dengan jQuery dan tanpa benar-benar menggunakan teknik seperti Ajax.
sumber
Bahkan. Coba sesuatu seperti ini sebagai gantinya:
sumber
Saya tidak melakukan menggunakan atribut khusus, karena saya mengeluarkan XHTML, karena saya ingin data dapat dibaca oleh perangkat lunak pihak ke-3 (walaupun, saya bisa memperpanjang skema XHTML jika saya mau).
Sebagai alternatif untuk atribut khusus, sebagian besar saya menemukan atribut id dan kelas (misalnya seperti yang disebutkan dalam jawaban lain) cukup.
Juga pertimbangkan ini:
Jika data tambahan harus dapat dibaca oleh manusia dan juga dapat dibaca oleh mesin, maka data tersebut harus disandikan menggunakan tag dan teks HTML (terlihat) alih-alih sebagai atribut khusus.
Jika tidak perlu dibaca manusia, maka mungkin dapat dikodekan menggunakan tag dan teks HTML yang tidak terlihat .
Beberapa orang membuat pengecualian: mereka mengizinkan atribut khusus, ditambahkan ke DOM oleh Javascript di sisi klien saat run-time. Mereka menganggap ini OK: karena atribut khusus hanya ditambahkan ke DOM pada saat run-time, HTML tidak mengandung atribut khusus.
sumber
Kami telah membuat editor berbasis web yang memahami subset HTML - subset yang sangat ketat (yang dipahami hampir secara universal oleh klien surat). Kita perlu mengekspresikan hal-hal seperti
<td width="@INSWIDTH_42@">
dalam database, tetapi kita tidak dapat memilikinya di DOM, jika tidak browser tempat editor berjalan, panik (atau lebih cenderung panik daripada cenderung panik pada atribut khusus) . Kami ingin drag-and-drop, jadi memasukkannya murni di DOM sudah keluar, seperti jquery.data()
(data tambahan tidak disalin dengan benar). Kami mungkin juga membutuhkan data tambahan untuk ikut dalam perjalanan.html()
. Pada akhirnya kami memutuskan untuk menggunakan<td width="1234" rs-width="@INSWIDTH_42@">
selama proses pengeditan, dan kemudian ketika kami POST semuanya, kami menghapuswidth
dan melakukan pencarian dan penghancuran regexs/rs-width=/width=/g
.Pada awalnya orang yang menulis sebagian besar ini adalah validasi-nazi pada masalah ini dan mencoba segalanya untuk menghindari atribut khusus kami, tetapi pada akhirnya menyetujui ketika tidak ada hal lain yang tampaknya berfungsi untuk SEMUA persyaratan kami. Itu membantu ketika dia menyadari bahwa atribut khusus tidak akan pernah muncul dalam email. Kami memang mempertimbangkan untuk menyandikan data tambahan kami
class
, tetapi memutuskan bahwa itu akan menjadi yang terbesar dari dua kejahatan.Secara pribadi, saya lebih suka memiliki hal-hal yang bersih dan melewati validator dll, tetapi sebagai karyawan perusahaan saya harus ingat bahwa tanggung jawab utama saya adalah memajukan tujuan perusahaan (menghasilkan uang secepat mungkin), bukan keinginan egois saya untuk kemurnian teknis. Alat harus bekerja untuk kita; bukan kita untuk mereka.
sumber
Saya tahu orang-orang menentangnya, tetapi saya datang dengan solusi super singkat untuk ini. Jika Anda ingin menggunakan atribut khusus seperti "milikku", misalnya:
Kemudian Anda dapat menjalankan kode ini untuk mendapatkan objek kembali seperti halnya jquery.data ().
sumber
Spec: Buat kontrol ASP.NET TextBox yang secara otomatis memformat teksnya sebagai angka, sesuai dengan properti "DecimalSeparator" dan "ThousandsSeparator", menggunakan JavaScript.
Salah satu cara untuk mentransfer properti ini dari kontrol ke JavaScript adalah dengan membuat kontrol membuat properti khusus:
Properti khusus mudah diakses oleh JavaScript. Dan sementara halaman menggunakan elemen dengan properti khusus tidak akan divalidasi , rendering halaman itu tidak akan terpengaruh.
Saya hanya menggunakan pendekatan ini ketika saya ingin mengaitkan tipe sederhana seperti string dan integer ke elemen HTML untuk digunakan dengan JavaScript. Jika saya ingin membuat elemen HTML lebih mudah diidentifikasi, saya akan menggunakan properti class dan id .
sumber
Untuk aplikasi web yang kompleks, saya menjatuhkan atribut khusus di semua tempat.
Untuk halaman yang menghadap publik lainnya, saya menggunakan atribut "rel" dan membuang semua data saya di JSON dan mendekode dengan MooTools atau jQuery:
Saya mencoba untuk tetap menggunakan atribut data HTML 5 belakangan ini hanya untuk "mempersiapkan", tetapi belum datang secara alami.
sumber
Saya menggunakan bidang khusus sepanjang waktu misalnya <ai = "" .... Lalu referensi ke i dengan jquery. Html tidak valid, ya. Itu bekerja dengan baik, ya.
sumber
Atribut khusus, menurut pendapat saya, tidak boleh digunakan karena tidak valid. Alternatif untuk itu, Anda dapat mendefinisikan banyak kelas untuk elemen tunggal seperti:
sumber
class
atributnya jelas tidak diperuntukkan untuk "penampilan" saja. Penggunaan lain adalah "pemrosesan tujuan umum oleh agen pengguna". Ini berbicara spec: w3.org/TR/REC-html40/struct/global.html#h-7.5.2