justsink
justsink
发布于 3周前

js 上下移动元素

/**
 * 向上移动 dom(dom树中)
 * @param el
 */
function moveUpElement(el) {
  swapElements(el, el.previousElementSibling)
}

/**
 * 向下移动 dom(dom树中)
 * @param el
 */
function moveDownElement(el) {
  swapElements(el, el.nextElementSibling)
}

// 交换两个元素
function swapElements(a, b) {
  if (a == b) return
  //记录父元素
  var bp = b.parentNode,
    ap = a.parentNode
  //记录下一个同级元素
  var an = a.nextElementSibling,
    bn = b.nextElementSibling
  //如果参照物是邻近元素则直接调整位置
  if (an == b) return bp.insertBefore(b, a)
  if (bn == a) return ap.insertBefore(a, b)
  if (a.contains(b))
    //如果a包含了b
    return ap.insertBefore(b, a), bp.insertBefore(a, bn)
  else return bp.insertBefore(a, b), ap.insertBefore(b, an)
}