Saya punya beberapa html seperti ini:
<div id="1">
<p>
Volume = <input type="text" />
<button rel="3.93e-6" class="1" type="button">Check answer</button>
</p>
<div></div>
</div>
dan beberapa JS seperti ini:
$("button").click(function () {
var buttonNo = $(this).attr('class');
var correct = Number($(this).attr('rel'));
validate (Number($("#"+buttonNo+" input").val()),correct);
$("#"+buttonNo+" div").html(feedback);
});
Yang benar-benar saya inginkan adalah jika saya tidak harus memiliki class = "1" pada tombol (saya tahu kelas numerik tidak valid, tapi ini adalah WIP!), Jadi saya bisa menentukan tombolTidak berdasarkan id dari div induk. Dalam kehidupan nyata, ada banyak bagian yang terlihat seperti ini.
Bagaimana cara menemukan id dari tombol parenting div.
Apa cara yang lebih semantik untuk menyimpan jawaban dalam kode tombol. Saya ingin membuat ini semudah mungkin bagi non programmer untuk menyalin dan menempel tanpa merusak sesuatu!
1.
2.
Pasti ada banyak cara! Salah satunya adalah menyembunyikan elemen yang berisi jawabannya, misalnya
Dan kemudian miliki kode jQuery yang mirip dengan yang di atas untuk mengambilnya:
perlu diingat bahwa jika Anda memasukkan jawaban dalam kode klien maka mereka dapat melihatnya :) Cara terbaik untuk melakukannya adalah dengan memvalidasinya di sisi server, tetapi untuk aplikasi dengan cakupan terbatas, hal ini mungkin tidak menjadi masalah.
sumber
$(parent[0]).attr('id')
setelah saya menyukai beberapa selektor induk.Coba ini:
sumber
sumber
Untuk mendapatkan id dari div induk:
Selain itu, Anda dapat sedikit merefaktor kode Anda:
Sekarang tidak perlu kelas tombol
Penjelasan
eq (0), artinya Anda akan memilih salah satu elemen dari objek jQuery, dalam hal ini elemen 0, demikian elemen pertama. http://docs.jquery.com/Selectors/eq#index
$ (selector) .siblings (siblingsSelector) akan memilih semua saudara (elemen dengan induk yang sama) yang cocok dengan siblingsSelector http://docs.jquery.com/Traversing / siblings # expr
$ (selector) .parents (parentSelector) akan memilih semua elemen induk yang cocok dengan selektor yang cocok dengan pemilih induk. http://docs.jquery.com/Traversing/parents#expr
Jadi: $ (selector) .parents ('div: eq (0)'); akan cocok dengan div induk pertama dari elemen yang cocok dengan selector.
Anda harus melihat dokumen jQuery, khususnya penyeleksi dan traverse:
sumber
http://jsfiddle.net/qVGwh/6/ Periksa ini
sumber
Ini dapat dengan mudah dilakukan dengan melakukan:
Anda melampirkan ini ke objek apa pun di dalam tabel dan itu akan mengembalikan Anda id dari tabel itu.
sumber
JQUery memiliki metode .parents () untuk naik pohon DOM Anda bisa memulainya dari sana.
Jika Anda tertarik untuk melakukan ini dengan cara yang lebih semantik, menurut saya menggunakan atribut REL pada tombol adalah cara terbaik untuk mendefinisikan secara semantik "ini adalah jawabannya" dalam kode Anda. Saya akan merekomendasikan sesuatu seperti ini:
dan
Tidak begitu yakin bagaimana validasi dan umpan balik Anda bekerja, tetapi Anda mendapatkan idenya.
sumber
find () dan terdekat () tampaknya sedikit lebih lambat dari:
sumber
$(this).parent().parent().attr("id");
?