Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.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 如何在DOM中移动这些元素_Javascript - Fatal编程技术网

Javascript 如何在DOM中移动这些元素

Javascript 如何在DOM中移动这些元素,javascript,Javascript,我不想更改HTML,因为我想保持默认视图的显示方式,并希望在第二个视图中移动它们。我想知道如何对div类进行动态排序。 我想通过点击按钮来实现这一点。我有一个用于“点击”的事件监听器,我正在做一些事情,移动逻辑将进入这个事件监听器。 我知道我可以得到这些div,从他们的父母那里搬走,放在我想要的地方。但我不知道如何为每个人做这些,因为我有多个lis。我正在努力与循环,以便我可以做这些为每一个李。我需要使用纯JS而不是jQuery来实现这一点 <ul> <li> &

我不想更改HTML,因为我想保持默认视图的显示方式,并希望在第二个视图中移动它们。我想知道如何对div类进行动态排序。
我想通过点击按钮来实现这一点。我有一个用于“点击”的事件监听器,我正在做一些事情,移动逻辑将进入这个事件监听器。 我知道我可以得到这些div,从他们的父母那里搬走,放在我想要的地方。但我不知道如何为每个人做这些,因为我有多个lis。我正在努力与循环,以便我可以做这些为每一个李。我需要使用纯JS而不是jQuery来实现这一点

<ul>
<li>
    <div>
        <div class="a">
            <div class="b">
                <a class="c">
                    <div class="d"></div>
                    <div class="e">
                        <div class="f"></div> // this is the first item that I want to move
                    </div>
                    <div class="g"></div> // this is the second item that I want to move
                </a>
            </div>
            <div class= "h"></div> // I want above mentioned divs to be before this div
        </div>
    </div>
</li>
//There are multiples lis
<li></li>

假设您希望在加载页面时执行此操作,您可以通过以下JQuery DOM操作来解决问题:

$(document).ready(function(){
    $("ul .a").each(function(index, element){
    $current_div_a = $(element);

    $div_h = $current_div_a.find(".h");

    $div_f = $current_div_a.find(".f");
    $div_f.clone().insertBefore($div_h);
    $div_f.remove();

    $div_g = $current_div_a.find(".g");
    $div_g.clone().insertBefore($div_h);
    $div_g.remove();
  })
});
你可以在电脑上测试一下

不过,我强烈反对这种做法。我想这也是为什么你的问题也得到一些反对票的原因。只需修改HTML,就可以使您的代码保持干净、可维护和更清晰,便于其他开始处理您的项目的人使用。尽可能保持代码的向后兼容性将在以后导致可维护性问题。

我最终使用了

var list = document.querySelectorAll("ul li");
                for (var item of list) {
                    let fClass = item.querySelector(".f");
                    fClass.parentNode.removeChild(fClass);
                    let parentOfFirstChildAfterWhichIwantMyF = item.querySelector(//selector for parentOfFirstChildAfterWhichIwantMyF);
                    parentOfFirstChildAfterWhichIwantMyF.insertAdjacentElement("beforeend", fClass);
                }

移动是什么意思?如果您通过脚本移动它们,您将获得与在html中直接移动它们相同的效果,那么为什么?因此,类为f和类为g的div显示在类为h的div之前。您能否进一步解释一下,您希望如何实现这一点?通过单击按钮,您希望结果显示在同一页上还是另一页上?这是一个奇怪的请求,我想通过点击按钮来实现。我有一个用于“点击”的事件监听器,我正在做一些事情,这个移动逻辑将进入这个事件监听器。