如何使用JavaScript获取HTML中的下一个元素?
假设我有三个<div>
,我在JavaScript代码中引用了一个,我希望得到下一个<div>
哪个是前一个。
答案 0 :(得分:223)
使用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这样的库可以为您提供开箱即用的所有这些跨浏览器检查。
答案 1 :(得分:26)
在纯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 :(得分:22)
确实取决于文档的整体结构。
如果你有:
<div></div>
<div></div>
<div></div>
它可能就像遍历使用
一样简单mydiv.nextSibling;
mydiv.previousSibling;
但是,如果“下一个”div可以在文档中的任何位置,则需要更复杂的解决方案。你可以尝试使用
document.getElementsByTagName("div");
并通过这些来完成你想要的地方。
如果您正在进行大量复杂的DOM遍历,我建议您查看jQuery等库。
答案 3 :(得分:19)
每个HTMLElement都有一个属性,“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;
答案 4 :(得分:14)
这很容易...... 它是一个纯粹的JavaScript代码
<script>
alert(document.getElementById("someElement").previousElementSibling.innerHTML);
</script>
答案 5 :(得分:6)
其实很简单。试试这个:
let myReferenceDiv = document.getElementById('mydiv');
let prev = myReferenceDiv.previousElementSibling;
let next = myReferenceDiv.nextElementSibling;
答案 6 :(得分:2)
所有这些解决方案看起来都有点矫枉过正。 为什么要使用我的解决方案?
IE9支持 configure: error: unrecognized option: `--user=www-data'
previousElementSibling
需要填充
document.addEventListener
可能会返回文字
请注意我已选择返回第一个/最后一个元素,以防边界被破坏。 在RL使用中,我希望它返回null。
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];
document.write(nextEl.id);
document.write("<br/>");
document.write(prevEl.id);
答案 7 :(得分:0)
经过测试,它对我有用。找到我的元素根据您拥有的文档结构进行更改。
<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;
}
答案 8 :(得分:-1)
那很简单
var element = querySelector("div")
var nextelement = element.ParentElement.querySelector("div+div")