javascript - 将 div 直接移动到另一个带有普通/原生 js 的 div 之后?
问题描述
许多人可能会问为什么想看看它是否真的需要。虽然不受欢迎,但由于与答案无关,因此不会详细说明此特定用例。它可以通过一行 JQuery 轻松完成,但是需要纯 js 并且理想情况下尽可能短而直接。请参阅 SO 上的类似请求,但许多请求用于在 div 内移动或具有稍微复杂的要求。
创建了一个按需要工作的基本示例:
var contentDiv = document.querySelector('.c');
var anchorDiv = document.querySelector('.b');
contentDiv.after(anchorDiv);
<div class="container">
<div class="a">
A
</div>
<div class="b">
B
</div>
<div class="c">
C
</div>
</div>
但是在实际代码上执行此操作时会出现错误:
TypeError:null 不是对象(评估 'contentDiv.after')
虽然将脚本放在页面顶部可能会导致这种情况,但将其放在底部,那么还有其他可能导致这种情况的原因吗?
如果特定的类名有问题,实际使用的代码如下:
<script>
var contentDiv = document.querySelector('.product-description');
var anchorDiv = document.querySelector('.product-details__container');
contentDiv.after(anchorDiv);
</script>
还想也许我需要准备一份文件。也是这样:
<script>
document.addEventListener('DOMContentLoaded', function () {
var contentDiv = document.querySelector('.product-description');
var anchorDiv = document.querySelector('.product-details__container');
contentDiv.after(anchorDiv);
}, false);
</script>
但同样的错误。有任何想法吗?
解决方案
如果您对某些页面进行 AJAX,那么在代码运行时您可能没有该类的元素
试试这个看看它最终是否有效,然后你就知道为什么了
const swap = () => {
const contentDiv = document.querySelector('.product-description');
const anchorDiv = document.querySelector('.product-details__container');
if (contentDiv && anchorDiv) contentDiv.after(anchorDiv);
else {
console.log({contentDiv},{anchorDiv})
setTimeout(swap,1000)
}
};
window.addEventListener('load', swap);
推荐阅读
- python - 如何使用 Python 并发多进程功能但只调用一次此会话
- bison - syntaxique.tab.c:对 yylex 的未定义引用
- c# - 使用 Keycloak 进行 dotnet web api 身份验证
- swift - 如何使用带 Race 的 PromiseKit 来返回最快的结果
- python - 为什么uWSGI无法导入实际安装的包?
- bash - 仅列出与前缀为“别名 www”的 ServerName 不匹配的别名。来自 apachectl -S
- jasmine - 有没有办法让 Jasmine 的期望在失败时重试
- asp.net-mvc-5 - IDX12709:CanReadToken() 返回错误。JWT 格式不正确 - Open ID Connect 身份验证
- r - 将多个 xml 文件导入并转换为 DF
- javascript - localStorage 不适用于用户帐户