Javascript 尽管把它放在;“文件准备就绪”;,为什么我可以看到jQuery';追加';当我加载页面时发生了什么?

Javascript 尽管把它放在;“文件准备就绪”;,为什么我可以看到jQuery';追加';当我加载页面时发生了什么?,javascript,html,jquery,dom,document,Javascript,Html,Jquery,Dom,Document,我有在div中移动的代码。它应该发生在用户的视野之外。但是每当我清除缓存并刷新页面来测试它时,我每次都会看到这些div在移动!这在视觉上非常烦人 我有两种方法可以做到这一点,我都可以看到视觉效果 第一条路: //START MOVE [...document.querySelectorAll('#primary')].forEach(x => { moveElement( x.querySelector('.snax-voting-contain

我有在div中移动的代码。它应该发生在用户的视野之外。但是每当我清除缓存并刷新页面来测试它时,我每次都会看到这些div在移动!这在视觉上非常烦人

我有两种方法可以做到这一点,我都可以看到视觉效果

第一条路:

    //START MOVE
    [...document.querySelectorAll('#primary')].forEach(x => {
      moveElement(
        x.querySelector('.snax-voting-container-body'),
        x.querySelector('.object1')
        //x.querySelector('.snax-voting-container-body')
      );
    });

    /**
     * Moves an element by detaching it from its parent and appending it to
     * a target.
     * @param {HTMLElement|String} ref - Element to detach and move
     * @param {HTMLElement|String} target - Element where ref will be appended
     * @return Returns the element that was moved
     */
    function moveElement(ref, target) {
      if (typeof target === 'string') target = document.querySelector(target);
      target.appendChild(detatchElement(ref));
      return ref;
    }

    /**
     * Detaches an element from its parent.
     * @param {HTMLElement|String} ref - Element to detach from its parent
     * @return Returns the detached element
     */
    function detatchElement(ref) {
      if (typeof ref === 'string') ref = document.querySelector(ref);
      return ref.parentElement.removeChild(ref);
    }//end of MOVE
第二种方式:

    $('.object1').append(  $('.snax-voting-container-body') );
知道为什么会发生这种情况吗?为什么我可以看到这个过程,尽管它在
$(document).ready(function(){
)中,谢谢。

问题
$(document).ready()
将在执行移动之前等待DOM呈现,因此在它进行更改之前,您将立即看到旧位置。这是一个限制,因为您正在使用JavaScript在DOM呈现后对其进行操作(你需要等到它被渲染之后,否则就没有东西可以移动了)

解决方案 一个可能的解决办法是隐藏你要移动的元素,然后只在移动完成后才显示

可以通过向要移动的元素添加.hidden类,然后在移动后删除该类来实现这一点

var ref=document.querySelector('.foo');//要移动的元素
var target=document.querySelector('.red')//目标
moveElement(参考,目标);//移动
ref.classList.remove('hide')//取消隐藏
函数detatchElement(ref){
如果(typeof ref==='string')ref=document.querySelector(ref);
返回ref.parentElement.removeChild(ref);
}
功能元素(参考,目标){
if(typeof target==='string')target=document.querySelector(target);
target.appendChild(detatchElement(ref));
返回ref;
}
div{
显示:网格;
放置项目:中心;
高度:100px;
}
瑞德先生{
背景色:红色;
}
蓝先生{
背景颜色:蓝色;
}
傅先生{
颜色:白色;
字体大小:20px;
}
.隐藏{
显示:无;
}


我从蓝色开始。
非常感谢您提供完整的示例!这非常有用。