Как получить следующий элемент в html с помощью javascript?
Предположим, у меня есть три div
, и я получаю ссылку на один в js-коде, я хочу получить, который является следующим div и который является предыдущим.
Получить следующий/предыдущий элемент с помощью Javascript
Ответ 1
В чистом 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.
Ответ 2
используйте nextSibling
и previousSibling
свойства:
<div id="foo1"></div>
<div id="foo2"></div>
<div id="foo3"></div>
document.getElementById('foo2').nextSibling; // #foo3
document.getElementById('foo2').previousSibling; // #foo1
Однако в некоторых браузерах (я забываю, что) вам также нужно проверить узлы и комментарии узлов:
var div = document.getElementById('foo2');
var nextSibling = div.nextSibling;
while(nextSibling && nextSibling.nodeType != 1) {
nextSibling = nextSibling.nextSibling
}
Библиотеки, такие как jQuery, обрабатывают все эти кроссбраузерные проверки для вас из коробки.
Ответ 3
Действительно зависит от общей структуры вашего документа.
Если у вас есть:
<div></div>
<div></div>
<div></div>
это может быть так же просто, как прохождение через
mydiv.nextSibling;
mydiv.previousSibling;
Однако, если "следующий" div может быть где угодно в документе, вам понадобится более сложное решение. Вы можете попробовать что-то, используя
document.getElementsByTagName("div");
и пройдите через них, чтобы добраться туда, где вы хотите как-то.
Если вы делаете много сложного перемещения DOM, например, я бы рекомендовал посмотреть в библиотеку, такую как jQuery.
Ответ 4
В каждом элементе HTML есть атрибут "previousElementSibling".
Пример:
<div id="a">A</div>
<div id="b">B</div>
<div id="c">c</div>
<div id="result">Resultado: </div>
var b = document.getElementById("c").previousElementSibling;
document.getElementById("result").innerHTML += b.innerHTML;
Ответ 5
Это будет легко... его чистый код javascript
<script>
alert(document.getElementById("someElement").previousElementSibling.innerHTML);
</script>
Ответ 6
все эти решения выглядят как перебор. Зачем использовать мое решение?
previousElementSibling
поддерживается с помощью IE9
document.addEventListener
требуется polyfill
previousSibling
может возвращать текст
Как насчет чего-то простого:
var el = document.getElementById("child1"),
children = el.parentNode.children,
len = children.length,
ind = [].indexOf.call(children, el),
nextEl = children[ind === len ? len : ind + 1],
prevEl = children[ind === 0 ? 0 : ind - 1];
Обратите внимание, что я решил вернуть первый/последний элемент в случае нарушения границ. В использовании RL я бы предпочел, чтобы он вернул нуль.
Посмотрите, как это работает: JSFiddle
Ответ 7
Протестировал его, и это сработало для меня. Элемент, который меня меняет, зависит от структуры документа, который у вас есть.
<html>
<head>
<script type="text/javascript" src="test.js"></script>
</head>
<body>
<form method="post" id = "formId" action="action.php" onsubmit="return false;">
<table>
<tr>
<td>
<label class="standard_text">E-mail</label>
</td>
<td><input class="textarea" name="mail" id="mail" placeholder="E-mail"></label></td>
<td><input class="textarea" name="name" id="name" placeholder="E-mail"> </label></td>
<td><input class="textarea" name="myname" id="myname" placeholder="E-mail"></label></td>
<td><div class="check_icon icon_yes" style="display:none" id="mail_ok_icon"></div></td>
<td><div class="check_icon icon_no" style="display:none" id="mail_no_icon"></div></label></td>
<td><div class="check_message" style="display:none" id="mail_message"><label class="important_text">The email format is not correct!</label></div></td>
</tr>
</table>
<input class="button_submit" type="submit" name="send_form" value="Register"/>
</form>
</body>
</html>
var inputs;
document.addEventListener("DOMContentLoaded", function(event) {
var form = document.getElementById('formId');
inputs = form.getElementsByTagName("input");
for(var i = 0 ; i < inputs.length;i++) {
inputs[i].addEventListener('keydown', function(e){
if(e.keyCode == 13) {
var currentIndex = findElement(e.target)
if(currentIndex > -1 && currentIndex < inputs.length) {
inputs[currentIndex+1].focus();
}
}
});
}
});
function findElement(element) {
var index = -1;
for(var i = 0; i < inputs.length; i++) {
if(inputs[i] == element) {
return i;
}
}
return index;
}