Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 上移列表项_Javascript_Dom - Fatal编程技术网

Javascript 上移列表项

Javascript 上移列表项,javascript,dom,Javascript,Dom,您好,我有以下脚本: 我希望moveUp函数将列表向上移动一个位置 var moveUp = function (up, direction) { var btn = up.target, li = btn.parentNode; li.insertBefore(li[1].nextSibling) } 有没有一个简单的方法可以做到这一点?另外,请使用纯javascript。我想您需要: li.parentNode.insertBefore(li, li.previousSi

您好,我有以下脚本:

我希望moveUp函数将列表向上移动一个位置

var moveUp = function (up, direction) {
  var btn = up.target,
    li = btn.parentNode;

  li.insertBefore(li[1].nextSibling)
}
有没有一个简单的方法可以做到这一点?另外,请使用纯javascript。

我想您需要:

li.parentNode.insertBefore(li, li.previousSibling);
但是请注意,对于第一个元素,
li.previousSibling
null
,在这种情况下,它将附加到列表中。因此,必须添加一个复选框以避免移动第一个元素:

if (li.previsousSibling) {
    li.parentNode.insertBefore(li, li.previousSibling);
}

代码中的问题:

  • DOM操作方法总是在父节点上工作,而不是在节点本身上。如果您不知道某个方法是如何工作的,请在google上查找
    mdn insertBefore
  • li[1]
    尝试访问
    li
    的属性
    1
    ,该属性不存在,因为
    li
    是DOM元素对象
    • 我想你想要:

      li.parentNode.insertBefore(li, li.previousSibling);
      
      但是请注意,对于第一个元素,
      li.previousSibling
      null
      ,在这种情况下,它将附加到列表中。因此,必须添加一个复选框以避免移动第一个元素:

      if (li.previsousSibling) {
          li.parentNode.insertBefore(li, li.previousSibling);
      }
      

      代码中的问题:

      • DOM操作方法总是在父节点上工作,而不是在节点本身上。如果您不知道某个方法是如何工作的,请在google上查找
        mdn insertBefore
      • li[1]
        尝试访问
        li
        的属性
        1
        ,该属性不存在,因为
        li
        是DOM元素对象

      是的,我错过了
      t
      ,它应该是
      之前插入的
      。。。你也可以弄明白;)是的,我知道了对不起!因此,对于我的下移函数,它完全不是sameli.parentNode.insertBefore(li,li.nextSibling);//应该是这样的,对吗?不,如果你在下一个同级节点之前插入节点,你只是在插入它现在所在的位置。您想在“下一个”同级之前插入它:
      li.parentNode.insertBefore(li,li.nextSibling.nextSibling)。当然,您应该始终确保定义了
      li.nextSibling
      。是的,我错过了
      t
      ,它应该是
      insertBefore
      。。。你也可以弄明白;)是的,我知道了对不起!因此,对于我的下移函数,它完全不是sameli.parentNode.insertBefore(li,li.nextSibling);//应该是这样的,对吗?不,如果你在下一个同级节点之前插入节点,你只是在插入它现在所在的位置。您想在“下一个”同级之前插入它:
      li.parentNode.insertBefore(li,li.nextSibling.nextSibling)。当然,您应该始终确保定义了
      li.nextSibling