高效的获取当前元素是父元素的第几个子元素_javascript技巧
例如处理事件的时候,有时候需要知道当前点击的是第几个子节点,而HTML DOM本身并没有直接提供相应的属性,需要自己来计算。
从一个索引序号,很容易得到该索引对应的子节点或者子元素,直接用parentNode.childNodes[index] 或 parentNode.children[index] 就行。
但反过来,已知一个节点或元素对象,要知道它的索引序号则没有那么直接了。
一些特殊的元素,HTML DOM有对应的属性表示其索引序号,主要是表格的TD 和 TR 元素。
表格单元格TD元素有 cellIndex 属性。
表格行TR元素有rowIndex属性。
如果你的处理目标刚好就是表格,则优先使用这两个属性。
但一般的节点或元素并没有 childNodeIndex 或者 childElementIndex 之类的属性。
解决方案主要分为两类:
一、预先计算并缓存节点的索引号(可以存在节点属性或者js变量中)。
二、实时计算,需要遍历部分节点。
应用中,可根据不同的实际情况,选用上述两类方案之一。
适用方案一的情形:
当DOM结构不会变化,并且需要频繁的获取个别节点的索引,可采用方案一。
优点是后续读取快,缺点是初始化需要开销,DOM结构变化后需要重新初始化。
适用方案二的情形:
DOM结构可能会变化,并且不是特别频繁的获取个别节点的索引,可采用方案二。
优点是不受DOM结构变化的影响,不会污染DOM结构,没有初始化开销。缺点是不适合高频率调用。
一般而言,采用方案二是更好的,因为通常DOM树规模是比较有限的,一轮的循环并不会导致显著降低整体性能,而其优点则是显著的。
对于IE浏览器,则有更直接的方法。
从IE4到IE11,都有sourceIndex属性,这个属性表示了元素在DOM树的顺序,比较元素和父元素的sourceIndex的差值就很容易知道元素是第几个子元素了。
我写了一段函数来区分处理,在IE下采用sourceIndex高效判断,非IE则采用一般遍历。
function getChildrenIndex(ele){
//IE is simplest and fastest
if(ele.sourceIndex){
return ele.sourceIndex - ele.parentNode.sourceIndex - 1;
}
//other browsers
var i=0;
while(ele = ele.previousElementSibling){
i++;
}
return i;
}
上面的函数只是计算元素Element,也就是nodeType为1的节点,文本节点、注释节点等将不被统计。如果需要计算所有节点在内,则不能适用sourceIndex,因为该属性只针对Element. previousElementSibling也要相应的改为previousSibling. 那就要写成如下的函数了:
function getNodeIndex(node){
var i=0;
while(ele = ele.previousSibling){
i++;
}
return i;
}
后记:在非IE下,有 compareDocumentPosition 方法用于比较节点的位置关系,但经过测试该方法的性能非常差,其内部的实现机制肯定不是像IE那样缓存了资源索引号的,如果这个方法极高效,那就可采用二分法进行计算,从而提高效率,但目前还不可能。
最后的总结:
对于表格TD和TR元素优先使用cellIndex和rowIndex属性。
对于IE优先使用sourceIndex属性。
其它情形使用previousElementSibling 或 previousSibling 进行遍历。
compareDocumentPosition 方法的性能非常差。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

jQuery ialah perpustakaan JavaScript popular yang digunakan untuk memudahkan banyak tugas dalam pembangunan web, termasuk manipulasi DOM. Dalam pembangunan web, selalunya perlu untuk menambah, memadam, mengubah suai dan menyemak elemen DOM, dan memadam sub-elemen terakhir juga merupakan keperluan biasa. Artikel ini akan memperkenalkan beberapa kaedah untuk memadam elemen anak terakhir menggunakan jQuery. Kaedah 1: Gunakan kaedah last() jQuery menyediakan kaedah last(), yang boleh memilih elemen terakhir hasil pertanyaan semasa. Dengan menggabungkan ini

Memahami peristiwa menggelegak: Mengapakah klik pada elemen kanak-kanak mencetuskan peristiwa pada elemen induk? Peristiwa menggelegak bermaksud bahawa dalam struktur elemen bersarang, apabila elemen anak mencetuskan peristiwa, peristiwa itu akan dihantar ke elemen induk lapisan demi lapisan seperti menggelegak, sehingga elemen induk paling luar. Mekanisme ini membolehkan peristiwa pada elemen kanak-kanak disebarkan ke seluruh pepohon elemen dan mencetuskan semua elemen berkaitan secara bergilir-gilir. Untuk lebih memahami peristiwa menggelegak, mari lihat kod contoh tertentu. Kod HTML: <divid="induk&q

Gunakan pemilih kelas pseudo :nth-child(n+3) untuk memilih gaya elemen anak yang kedudukannya lebih besar daripada atau sama dengan 3. Contoh kod khusus adalah seperti berikut: Kod HTML: <divid="container" ><divclass="item"> ;Elemen anak pertama</div><divclass="item"&

Bagaimana untuk mengalih keluar elemen anak terakhir menggunakan jQuery? Dalam pembangunan bahagian hadapan, kami sering menghadapi operasi yang memerlukan penambahan, pemadaman, pengubahsuaian dan penyemakan elemen halaman. Antaranya, memadam elemen anak terakhir adalah keperluan biasa. Artikel ini akan memperkenalkan cara menggunakan jQuery untuk memadam elemen anak terakhir, dengan contoh kod khusus. Pertama, kita perlu memperkenalkan perpustakaan jQuery ke dalam halaman untuk memastikan fungsinya boleh digunakan. Tambahkan kod berikut pada fail HTML anda: <

Gaya CSS menggunakan pemilih kelas pseudo :nth-child untuk memilih elemen anak pada kedudukan tertentu Dalam CSS, pemilih kelas pseudo digunakan untuk memilih elemen dalam keadaan tertentu dalam dokumen HTML. Selain pemilih kelas pseudo biasa seperti :hover dan :active, terdapat juga pemilih kelas pseudo yang sangat berguna dipanggil :nth-child, yang membolehkan kami memilih elemen anak pada kedudukan tertentu. Sintaks pemilih kelas pseudo :nth-child adalah seperti berikut: elemen induk:nth-child(n) di mana elemen induk mewakili elemen induk

Cara menggunakan jQuery untuk menentukan sama ada sesuatu elemen mengandungi elemen kanak-kanak Dalam pembangunan web, kita sering menghadapi situasi di mana kita perlu menentukan sama ada sesuatu elemen mengandungi elemen kanak-kanak. Fungsi ini boleh dicapai dengan sangat mudah menggunakan jQuery. Dalam artikel ini, kami akan memperkenalkan cara menggunakan jQuery untuk menentukan sama ada elemen mengandungi elemen kanak-kanak, dan memberikan contoh kod khusus. Dalam jQuery, anda boleh menggunakan kaedah children() untuk memilih semua elemen anak langsung bagi elemen tertentu. Jika elemen mengandungi elemen anak, gunakan childr

jQuery ialah perpustakaan JavaScript yang digunakan secara meluas dalam pembangunan bahagian hadapan Ia menyediakan API yang mudah dan berkuasa yang boleh memanipulasi elemen DOM dengan mudah. Dalam pembangunan sebenar, kadangkala kita perlu menentukan sama ada elemen mengandungi elemen kanak-kanak Dalam kes ini, kita perlu menggunakan jQuery untuk mencapai ini. Untuk menentukan sama ada sesuatu elemen mempunyai elemen anak, kita boleh menggunakan kaedah yang disediakan oleh jQuery. Berikut ialah kod sampel yang menunjukkan cara menggunakan jQuery untuk menentukan sama ada sesuatu elemen mengandungi elemen anak: <

Tajuk: jQuery Contoh: Bagaimana untuk memadam elemen anak terakhir menggunakan jQuery? Dalam pembangunan web, kami sering menghadapi situasi di mana kami perlu memanipulasi elemen DOM melalui JavaScript. Sebagai perpustakaan JavaScript yang digunakan secara meluas, jQuery menyediakan banyak kaedah mudah untuk memanipulasi elemen DOM. Artikel ini akan menggunakan contoh untuk memperkenalkan cara menggunakan jQuery untuk memadam elemen anak terakhir dan memberikan contoh kod terperinci. Pertama, kita perlu memperkenalkannya dalam fail HTML
