Получить следующий / предыдущий элемент с помощью JavaScript?
Как получить следующий элемент в HTML с помощью JavaScript?
Предположим, у меня есть три <div>
s и я получаю ссылку на один в коде JavaScript, я хочу получить, который является следующим <div>
и который является предыдущим.
7 ответов:
Ну в чистом 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
свойства:<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, обрабатывают все эти кросс-браузерные проверки для вас из коробки.
действительно зависит от общей структуры вашего документа.
Если у вас есть:
<div></div> <div></div> <div></div>
это может быть так же просто, как прохождение через использование
mydiv.nextSibling; mydiv.previousSibling;
однако, если "следующий" div может быть в любом месте документа, вам понадобится более сложное решение. Вы можете попробовать что-то с помощью
document.getElementsByTagName("div");
и работает через них, чтобы получить, где вы хотите как-то.
Если вы делаете много сложных DOM-переходов, таких как этот, я бы рекомендуем заглянуть в библиотеку, такую как jQuery.
на каждом HTMLElement есть атрибут "previousElementSibling".
Ex:
<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;
Это будет легко... его чистый код javascript
<script> alert(document.getElementById("someElement").previousElementSibling.innerHTML); </script>
все эти решения выглядят как перебор. Зачем использовать мое решение?
previousElementSibling
поддерживается в IE9
document.addEventListener
нужен полифилл
previousSibling
может вернуть текстобратите внимание, что я решил вернуть первый/последний элемент в случае, если границы нарушены. В использовании RL я бы предпочел, чтобы он возвращал null.
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]; document.write(nextEl.id); document.write("<br/>"); document.write(prevEl.id);
<div id="parent"> <div id="child1"></div> <div id="child2"></div> </div>
протестировал его, и это сработало для меня. Элемент найти меня изменить в соответствии со структурой документа, который у вас есть.
<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; }