【发布时间】:2017-08-06 17:32:56
【问题描述】:
我正在尝试制作一个列表,其中每一行都可以通过按下按钮来上升或下降。
我在按钮上使用了onclick方法,参数为'this'。
当页面加载时,需要点击几下才能触发事件。
之后,它需要点击 1 到 3 次。
这是为什么呢?
<!doctype html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Schedule</title>
</head>
<body>
<div id="eXes">
<div class="eX">
1
<button class="up" onclick="moveUp(this)">up</button>
<button class="down" onclick="moveDown(this)">down</button>
</div>
<div class="eX">
2
<button class="up" onclick="moveUp(this)">up</button>
<button class="down" onclick="moveDown(this)">down</button>
</div>
<div class="eX">
3
<button class="up" onclick="moveUp(this)">up</button>
<button class="down" onclick="moveDown(this)">down</button>
</div>
</div>
<script type="text/javascript">
function moveUp(el) {
var selected = el.parentNode;
var previous = el.parentNode.previousSibling;
document.getElementById("eXes").insertBefore(selected, previous);
}
</script>
<script type="text/javascript">
function moveDown(el) {
var selected = el.parentNode;
var next = el.parentNode.nextSibling;
document.getElementById("eXes").insertBefore(selected, next.nextSibling);
}
</script>
</body>
</html>
直播代码https://www.w3schools.com/code/tryit.asp?filename=FIAIQO31H90L
【问题讨论】:
-
首先,感谢所有回复。问题确实是空白被视为文本节点。我在link 找到的最简单和最优雅的修复方法是用 previous/nextElementSibling 替换 previous/nextSibling,尽管我还没有测试浏览器支持。附言@Risa__B 的 Array.prototype.slice.apply 方法对我来说是一个不错的新东西,尽管与问题并不完全相关。
标签: javascript onclick