Saya mencoba meneruskan "ini" dari rentang yang diklik ke fungsi jQuery yang kemudian dapat mengeksekusi jQuery pada anak pertama elemen yang diklik itu. Tampaknya tidak bisa melakukannya dengan benar ...
<p onclick="toggleSection($(this));"><span class="redClass"></span></p>
Javascript:
function toggleSection(element) {
element.toggleClass("redClass");
}
Bagaimana cara merujuk: elemen pertama-anak?
jQuery(document).ready(...)
?Jawaban:
Jika Anda ingin menerapkan pemilih ke konteks yang disediakan oleh set jQuery yang ada, coba fungsi find () :
Jørn Schou-Rode mencatat bahwa Anda mungkin hanya ingin menemukan turunan langsung pertama dari elemen konteks, karenanya pemilih anak (>). Dia juga menunjukkan bahwa Anda bisa menggunakan fungsi children () , yang sangat mirip dengan find () tetapi hanya mencari satu level di dalam hierarki (yang Anda butuhkan ...):
sumber
find()
pencarian melalui semua keturunan, dan:first-child
dapat mencocokkan satu elemen per orang tua. Karenanya, kueri ini kemungkinan akan mengembalikan beberapa elemen. Atau saya salah?element.children(":first-child")
atauelement.children().first();
Gunakan
children
fungsi dengan:first
pemilih untuk mendapatkan anak pertama tunggal darielement
:sumber
TypeError: Object [object HTMLAnchorElement] has no method 'toggleClass'
Saya telah menambahkan tes jsperf untuk melihat perbedaan kecepatan untuk berbagai pendekatan untuk mendapatkan anak pertama (total 1000+ anak)
diberikan,
notif = $('#foo')
Cara jQuery:
$(":first-child", notif)
- 4.304 ops / dtk - tercepatnotif.children(":first")
- 653 ops / detik - 85% lebih lambatnotif.children()[0]
- 1.416 ops / detik - 67% lebih lambatCara asli:
ele.firstChild
- 4,934,323 ops / detik (semua pendekatan di atas 100% lebih lambat dibandingkan denganfirstChild
)notif[0].firstChild
- 4,913.658 ops / dtkJadi, 3 pendekatan jQuery pertama tidak dianjurkan, setidaknya untuk anak pertama (saya ragu itu akan menjadi masalah dengan banyak lainnya juga). Jika Anda memiliki objek jQuery dan perlu mendapatkan anak pertama, maka dapatkan elemen DOM asli dari objek jQuery, menggunakan referensi array
[0]
(disarankan) atau.get(0)
dan gunakanele.firstChild
. Ini memberikan hasil yang sama identik dengan penggunaan JavaScript biasa.semua tes dilakukan di Chrome Canary build v15.0.854.0
sumber
firstChild
tidak akan memberikan hasil yang sama denganchildren()
kueri jQuery atau pemilih.firstChild
akan menyertakan simpul teks yang jarang diinginkan.contents()
Fungsi jQuery akan memasukkan mereka, tetapichildren()
tidak akan. Dukungan browserfirstElementChild
yang lebih baru yang akan memberikan elemen anak pertama, tetapi IE <9 tidak mendukungnya. Jadi, jika Anda menggunakanfirstChild
Anda harus secara manual menemukan anak simpul non-teks pertama.$(":first-child", notif)
harus$(":first", notif)
untuk perilaku yang diharapkan. Yang pertama akan mengembalikan semua keturunan elemen anak pertama.Temukan semua anak dan dapatkan yang pertama dari mereka.
sumber
.children(':first')
.Sudahkah Anda mencoba
Saya pikir Anda ingin mengatur elemen Anda sebagai konteks untuk pencarian Anda. Mungkin ada cara yang lebih baik untuk melakukan ini dimana beberapa guru jQuery lain akan melompat ke sini dan membuang Anda :)
sumber
element
memiliki cucuSaya baru saja menulis sebuah plugin yang menggunakan
.firstElementChild
jika memungkinkan, dan kembali ke iterasi setiap node individu jika perlu:Ini tidak secepat solusi DOM murni, tetapi dalam uji jsperf di bawah Chrome 24 itu beberapa urutan besarnya lebih cepat daripada metode berbasis pemilih jQuery lainnya.
sumber
document.body
belum diinisialisasi, 2) Kinerja hanya jauh lebih baik daripada alternatif jika jumlah node anak sangat tinggi. Untuk hanya beberapa anak (katakanlah kurang dari 10)$('>:first-child',context)
itu sedikit lebih cepat. Hanya jumlah anak yang memengaruhi kinerja, bukan kedalaman.document.body
- Saya akan memeriksanya.Anda bisa menggunakan DOM
sumber
Ini bisa dilakukan dengan sihir sederhana seperti ini:
Referensi: http://www.snoopcode.com/jquery/jquery-first-child-selector
sumber
tolong gunakan ini seperti hal pertama ini beri nama kelas untuk menandai p seperti "myp"
kemudian gunakan kode berikut
sumber
Jika Anda ingin anak pertama yang Anda butuhkan
Jika Anda ingin elemen pertama tertentu dalam dom dari elemen Anda, gunakan di bawah ini
coba: http://jsfiddle.net/vgGbc/2/
sumber
element
merupakan simpul DOM maka$(element).first()
sama dengan$(element)
, bukan anak pertamanya.