Dalam javascript murni, pemikiran saya adalah Anda harus menyusunnya terlebih dahulu di dalam sebuah koleksi.
var divs = document.getElementsByTagName("div");
//divs now contain each and every div element on the page
var selectionDiv = document.getElementById("MySecondDiv");
Jadi pada dasarnya dengan selectionDiv melakukan iterasi melalui koleksi untuk menemukan indeksnya, dan kemudian jelas -1 = sebelumnya +1 = berikutnya dalam batas
for(var i = 0; i < divs.length;i++)
{
if(divs[i] == selectionDiv)
{
var previous = divs[i - 1];
var next = divs[i + 1];
}
}
Perlu diketahui meskipun seperti yang saya katakan bahwa logika tambahan akan diperlukan untuk memeriksa bahwa Anda berada dalam batas, yaitu Anda tidak berada di akhir atau awal pengumpulan.
Ini juga berarti bahwa Anda memiliki div yang memiliki div turunan. Div berikutnya tidak akan menjadi saudara tetapi anak, Jadi jika Anda hanya ingin saudara pada tingkat yang sama dengan div target, gunakan nextSibling untuk memeriksa properti tagName .
gunakan
nextSibling
danpreviousSibling
properti:Namun di beberapa browser (saya lupa yang mana) Anda juga perlu memeriksa spasi dan node komentar:
Perpustakaan seperti jQuery menangani semua pemeriksaan lintas-browser ini untuk Anda di luar kotak.
sumber
div
Markup berikutnya mungkin tidak bersebelahan dengan elemen; mungkin level yang lebih dalam atau level yang lebih tinggi.if i write dirty HTML, Javascript will act strange
bagaimana menulis html yang bersih dan valid?Sangat tergantung pada keseluruhan struktur dokumen Anda.
Jika Anda memiliki:
itu mungkin sesederhana melintasi melalui penggunaan
Namun, jika div 'next' bisa berada di mana saja dalam dokumen, Anda memerlukan solusi yang lebih kompleks. Anda bisa mencoba sesuatu menggunakan
dan menjalankan ini untuk mendapatkan tempat yang Anda inginkan.
Jika Anda melakukan banyak penjelajahan DOM yang kompleks seperti ini, saya akan merekomendasikan untuk melihat ke perpustakaan seperti jQuery.
sumber
Ada atribut di setiap HTMLElement, "beforeElementSibling".
Ex:
Langsung: http://jsfiddle.net/QukKM/
sumber
previousSibling
tampaknya menjadi solusi lintas browser.Ini akan mudah ... ini adalah kode javascript murni
sumber
semua solusi ini terlihat berlebihan. Mengapa menggunakan solusi saya?
previousElementSibling
didukung dari IE9document.addEventListener
membutuhkan polyfillpreviousSibling
mungkin mengembalikan teksHarap dicatat saya telah memilih untuk mengembalikan elemen pertama / terakhir jika batas rusak. Dalam penggunaan RL, saya lebih suka mengembalikan null.
sumber
Mengujinya dan berhasil untuk saya. Elemen menemukan saya berubah sesuai struktur dokumen yang Anda miliki.
sumber