javascript - 如何将元素放在两个元素之间

标签 javascript html

document.getElementById("div").onclick = function(ev) {
  var btn = document.getElementById("btn4");
  btn.parentNode.removeChild(btn);
  ev.target.appendChild(btn);
}
button {
  margin-right: 10px;
}
<div id="div">
  <button id="btn1">1</button>
  <button id="btn2">2</button>
  <button id="btn3">3</button>
  <button id="btn4">4</button>
</div>

我想点击元素之间的空白将 4 按钮移动到它的位置,因为点击 between 1 2 将使数字 1 4 2 或在 2 3 之间点击将使数字 2 4 3 如果点击 3 数字将是 1 2 3 4 如果 4 已经移动

但数字 4 仅在单击按钮时才会添加到按钮内,如果在按钮之间的空白处单击则不会发生任何事情

喜欢改变位置的拖动效果

但也可以单击按钮的最左侧,将其放在左侧的空格中,与右侧的空格相同

最佳答案

请尝试下面的代码:

document.getElementById("div").onclick = function(ev) {
var divElement = document.getElementById("div");
var btn = document.getElementById("btn4");

var oTargetInsertionElement = null;
for (var i = divElement.children.length - 1; i >= 0; i--) {
    var oRect = divElement.children[i].getBoundingClientRect();

    if (divElement.children[0].getBoundingClientRect().x > ev.clientX) {
        oTargetInsertionElement = divElement.children[0];            
        //alert(divElement.children[0].id + ' - Before First Element');
        break;
    } else if (divElement.children[divElement.children.length - 1].getBoundingClientRect().x < ev.clientX) {
        oTargetInsertionElement = divElement.children[divElement.children.length - 1].nextSibiling;
        //alert(divElement.children[divElement.children.length - 1].id + ' - After Last Element');
        break;
    } else if (oRect.x < ev.clientX) {
        oTargetInsertionElement = divElement.children[i + 1];
        //alert(divElement.children[i].id + '-' + divElement.children[i + 1].id);
        break;
    }
}
if (oTargetInsertionElement != btn) {
    btn.parentNode.removeChild(btn);
    divElement.insertBefore(btn, oTargetInsertionElement);
}

}
button {
  margin-right: 10px;
}
<div id="div" style="padding:10px;">
  <button id="btn1">1</button>
  <button id="btn2">2</button>
  <button id="btn3">3</button>
  <button id="btn4">4</button>
</div>

关于javascript - 如何将元素放在两个元素之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56737220/

相关文章:

javascript - 当您键入时文本字段发生变化时更改跨度

javascript - 在 javascript 函数 (Meteor) 中创建 anchor 标记(超链接)

带有负值的 Javascript string.slice()

javascript - dojo.fx.easing.elasticOut ?

javascript - 如何在 jQuery 幻灯片更改时创建 ajax 调用?

javascript - 如何为 unicode 字母添加转换

android - 从 HTML 加载图像的 Webview 问题

javascript - JSX 消除 HTML 中的箭头 (>)

javascript - 在expo react-native中打开键盘时如何隐藏TabBar

Jquery Animate ScrollLeft 在 iPad 上不起作用