javascript - Jquery在包装每个x元素时追加
问题描述
我正在尝试创建这样的 HTML:
<div class="container">
<div class="wrap">
<div class="el"></div>
<div class="el"></div>
<div class="el"></div>
</div>
<div class="wrap">
<div class="el"></div>
<div class="el"></div>
<div class="el"></div>
</div>
<div class="wrap">
<div class="el"></div>
<div class="el"></div>
<div class="el"></div>
</div>
</div>
用于添加el
元素的组件:
<input type="text" name="elements" />
el
元素将根据输入中添加的数字附加到容器中。每 3 个元素应包装在wrap
div 中。
到目前为止我所拥有的:
$("input[name=elements]").on("keydown keyup", function() {
var amount = parseInt($(this).val());
for(i = 0; i < amount; i++) {
$(".container").append('<div class="el"></div>');
}
});
它添加了el
div,但我不确定如何同时包装每 3 个wrap
. 也可以删除el
div吗?如果说我先8
输入输入然后输入3
,将添加 11 个 div 而不是只有 3 个。换句话说,el
HTML 中的 div 数应始终等于输入值中的数字。每次输入类型时都先清除 HTML 是否有意义?
解决方案
您可以首先根据输入值的数量创建一个元素数组,将其附加到容器中,然后将每个第 n 个元素包装到wrap
元素中。
const container = $('.container')
$("input").on('keyup', function() {
const val = parseInt($(this).val()) || 0;
const html = Array.from(Array(val), () => (
$("<div>", {
'class': 'el',
'text': 'element'
})
))
container.html(html)
for (let i = 0; i < val; i += 3) {
container
.find('.el')
.slice(i, i + 3)
.wrapAll("<div class='wrap'></div>");
}
})
.wrap {
border: 1px solid green;
margin: 10px 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text">
<div class="container"></div>
推荐阅读
- python - 在 AWS Redshift 上安装 h3 python 库以在 UDF 中使用
- python-3.x - 如何将str日期时间转换为日期时间obj
- ios - 通过 Cocoapods 安装后无法导入库
- javascript - JS / ANGULAR:从方法回调中设置类变量值
- php - 使用 laravel 本地化页面标题
- tcp - 如何使用 actix-web HttpResponse 从 tokio TcpStream 发送数据
- java - 尝试使用 jsp 编辑上传的表单详细信息
- sql - 如何在当前日期和当前日期 + 2 之间提取数据但不包括周末?
- python - 无法将具有 int 类型键的 dict 分配给 EasyDict
- wordpress - 使用 WooCommerce API 根据 SKU 更新产品库存数量?