Katakanlah saya memiliki bentuk html. Setiap input / select / textarea akan memiliki atribut yang sesuai <label>
dengan for
id pengiringnya. Dalam hal ini, saya tahu bahwa setiap masukan hanya akan memiliki satu label.
Diberikan elemen input dalam javascript - melalui acara onkeyup, misalnya - apa cara terbaik untuk menemukan label terkaitnya?
javascript
html
label
Joel Coehoorn
sumber
sumber
function getInputLabel(thisElement) { var theAssociatedLabel,elementID; elementID = thisElement.id; theAssociatedLabel = thisElement.parentNode.querySelector("label[for='" + elementID + "']"); console.log('theAssociatedLabel.htmlFor: ' + theAssociatedLabel.htmlFor); theAssociatedLabel.style.backgroundColor = "green";//Set the label background color to green };
Jawaban:
Pertama, pindai halaman untuk label, dan tetapkan referensi ke label dari elemen formulir sebenarnya:
Kemudian, Anda cukup pergi:
Tidak perlu array pencarian :)
sumber
Jika Anda menggunakan jQuery, Anda dapat melakukan sesuatu seperti ini
Jika Anda tidak menggunakan jQuery, Anda harus mencari labelnya. Berikut adalah fungsi yang mengambil elemen sebagai argumen dan mengembalikan label terkait
sumber
Ada
labels
properti dalam standar HTML5 yang menunjuk ke label yang terkait dengan elemen masukan.Jadi, Anda dapat menggunakan sesuatu seperti ini (dukungan untuk
labels
properti asli tetapi dengan cadangan untuk mengambil label jika browser tidak mendukungnya) ...Lebih mudah jika Anda menggunakan jQuery ...
sumber
Saya sedikit terkejut bahwa sepertinya tidak ada yang tahu bahwa Anda diperbolehkan melakukan:
Yang tidak akan diambil oleh jawaban yang disarankan, tetapi akan memberi label input dengan benar.
Berikut beberapa kode yang memperhitungkan kasus ini:
Pemakaian:
Beberapa catatan:
aria-labelledby
jika Anda menggunakannya (diserahkan sebagai latihan kepada pembaca).sumber
for
atribut padalabel
elemen.Sebelumnya ...
Kemudian...
Komentar snarky: Ya, Anda juga bisa melakukannya dengan JQuery. :-)
sumber
document.querySelector ("label [for =" + vHtmlInputElement.id + "]");
Ini menjawab pertanyaan dengan cara yang paling sederhana dan paling ramping. Ini menggunakan vanilla javascript dan bekerja pada semua browser yang sesuai arus utama.
sumber
dengan jquery Anda bisa melakukan sesuatu seperti
sumber
Jika Anda ingin menggunakan querySelector (dan Anda bisa, bahkan hingga IE9 dan terkadang IE8!), Metode lain menjadi layak.
Jika kolom formulir Anda memiliki ID, dan Anda menggunakan
for
atribut label , ini menjadi sangat sederhana di JavaScript modern:Beberapa telah mencatat tentang banyak label; jika mereka semua menggunakan nilai yang sama untuk
for
atributnya, cukup gunakanquerySelectorAll
sebagai gantiquerySelector
dan lakukan perulangan untuk mendapatkan semua yang Anda butuhkan.sumber
Semua jawaban lainnya sangat ketinggalan jaman !!
Yang harus Anda lakukan adalah:
HTML5 telah didukung oleh semua browser utama selama bertahun-tahun. Sama sekali tidak ada alasan bahwa Anda harus membuat ini dari awal sendiri atau mengisinya sendiri! Secara harfiah, gunakan saja
input.labels
dan itu menyelesaikan semua masalah Anda.sumber
input.labels
tidak didukung oleh IE atau Edge, dan Firefox hanya menambahkan dukungan.Ini membantu saya mendapatkan label elemen input menggunakan ID-nya.
sumber
Jawaban dari Gijs sangat berharga bagi saya, tetapi sayangnya ekstensi tersebut tidak berfungsi.
Berikut ekstensi yang ditulis ulang yang berfungsi, ini dapat membantu seseorang:
sumber
Solusi yang sangat ringkas menggunakan fitur ES6 seperti destrukturisasi dan pengembalian implisit untuk mengubahnya menjadi liner yang praktis adalah:
Atau untuk mendapatkan satu label, bukan NodeList:
sumber
Sebenarnya jauh lebih mudah untuk menambahkan id ke label di formulir itu sendiri, misalnya:
Kemudian, Anda dapat menggunakan sesuatu seperti ini:
Javascript memang harus dalam fungsi body onload agar berfungsi.
Hanya sebuah pikiran, bekerja dengan indah untuk saya.
sumber
Seperti yang telah disebutkan, jawaban teratas (saat ini) tidak memperhitungkan kemungkinan untuk menyematkan input di dalam label.
Karena tidak ada yang memposting jawaban bebas JQuery, ini jawaban saya:
Dalam contoh ini, demi kesederhanaan, tabel pemeta diindeks secara langsung oleh elemen HTML input. Ini hampir tidak efisien dan Anda dapat menyesuaikannya sesuka Anda.
Anda dapat menggunakan formulir sebagai elemen dasar, atau seluruh dokumen jika Anda ingin mendapatkan label untuk beberapa formulir sekaligus.
Tidak ada pemeriksaan yang dilakukan untuk HTML yang salah (beberapa atau masukan hilang di dalam label, masukan yang hilang dengan id htmlFor yang sesuai, dll), tetapi silakan menambahkannya.
Anda mungkin ingin memangkas teks label, karena spasi di belakang sering muncul saat input disematkan di label.
sumber
Jawaban terbaik berfungsi dengan baik tetapi dalam banyak kasus, itu berlebihan dan tidak efisien untuk mengulang melalui semua
label
elemen.Berikut adalah fungsi yang efektif untuk mendapatkan
label
yang sesuai denganinput
elemen:Bagi saya, satu baris kode ini sudah cukup:
Dalam kebanyakan kasus,
label
akan sangat dekat atau di sebelah input, yang berarti loop dalam fungsi di atas hanya perlu mengulang beberapa kali.sumber
sudahkah Anda mencoba menggunakan document.getElementbyID ('id') di mana id adalah id label atau situasi di mana Anda tidak tahu mana yang Anda cari
sumber
Gunakan pemilih JQuery:
sumber
Untuk pencari masa depan ... Berikut ini adalah versi jQuery-ified dari jawaban yang diterima FlySwat:
Menggunakan:
sumber
for
loop berakhireach()
? MengapahtmlFor
bukanattr("for")
?Saya tahu ini sudah tua, tetapi saya mengalami masalah dengan beberapa solusi dan menyatukannya. Saya telah menguji ini di Windows (Chrome, Firefox dan MSIE) dan OS X (Chrome dan Safari) dan percaya ini adalah solusi paling sederhana. Ia bekerja dengan tiga gaya melampirkan label ini.
Menggunakan jQuery:
JSFiddle saya: http://jsfiddle.net/pnosko/6PQCw/
sumber
Saya telah membuat untuk kebutuhan saya sendiri, dapat berguna untuk seseorang: JSFIDDLE
sumber
Saya agak terkejut tidak ada yang menyarankan untuk menggunakan metode hubungan CSS?
di lembar gaya, Anda dapat mereferensikan label dari pemilih elemen:
jika kotak centang memiliki id 'XXX' maka label akan ditemukan melalui jQuery oleh:
Anda juga dapat menerapkan .find ('+ label') untuk mengembalikan label dari elemen kotak centang jQuery, yaitu berguna saat melakukan perulangan:
sumber