Как мне получить следующий элемент в HTML с помощью JavaScript?
Предположим, у меня есть три <div>
s, и я получил ссылку на одну в коде JavaScript, я хочу узнать, какая из них следующая, <div>
а какая предыдущая.
источник
Как мне получить следующий элемент в HTML с помощью JavaScript?
Предположим, у меня есть три <div>
s, и я получил ссылку на одну в коде JavaScript, я хочу узнать, какая из них следующая, <div>
а какая предыдущая.
Что ж, в чистом javascript я считаю, что вам сначала нужно сопоставить их внутри коллекции.
var divs = document.getElementsByTagName("div");
//divs now contain each and every div element on the page
var selectionDiv = document.getElementById("MySecondDiv");
Итак, в основном с selectionDiv перебираем коллекцию, чтобы найти ее индекс, а затем, очевидно, -1 = предыдущий +1 = следующий в пределах
for(var i = 0; i < divs.length;i++)
{
if(divs[i] == selectionDiv)
{
var previous = divs[i - 1];
var next = divs[i + 1];
}
}
Пожалуйста, имейте в виду, что, как я уже сказал, потребуется дополнительная логика для проверки того, что вы находитесь в границах, т.е. вы не находитесь в конце или начале коллекции.
Это также будет означать, что у вас есть div, в который вложен дочерний div. Следующий div будет не родственным, а дочерним, поэтому, если вам нужны только братья и сестры на том же уровне, что и целевой div, тогда обязательно используйте nextSibling для проверки свойства tagName .
использовать
nextSibling
иpreviousSibling
свойства:Однако в некоторых браузерах (я забыл о каких) вам также необходимо проверить наличие пробелов и узлов комментариев:
Такие библиотеки, как jQuery, обрабатывают все эти кроссбраузерные проверки за вас из коробки.
источник
div
в разметке может не примыкать к элементу; это может быть уровень глубже или уровень выше.if i write dirty HTML, Javascript will act strange
как насчет написания чистого и правильного HTML?Действительно зависит от общей структуры вашего документа.
Если у вас есть:
это может быть так же просто, как переход с помощью
Однако, если «следующий» div может быть где угодно в документе, вам понадобится более сложное решение. Вы можете попробовать что-нибудь, используя
и пробежаться по ним, чтобы как-то добраться туда, куда вы хотите.
Если вы выполняете много сложного обхода DOM, такого как этот, я бы порекомендовал изучить библиотеку, такую как jQuery.
источник
На каждом элементе HTMLElement есть атрибут "previousElementSibling".
Пример:
В прямом эфире: http://jsfiddle.net/QukKM/
источник
previousSibling
кажется кроссбраузерным решением.Это будет легко ... это чистый код javascript
источник
все эти решения выглядят как излишество. Зачем использовать мое решение?
previousElementSibling
поддерживается IE9document.addEventListener
нужен полифиллpreviousSibling
может вернуть текстОбратите внимание, что я решил вернуть первый / последний элемент, если границы нарушены. При использовании RL я бы предпочел, чтобы он возвращал нуль.
источник
Протестировал, и у меня это сработало. Элемент, который меня находит, изменится в соответствии со структурой вашего документа.
источник