html - 使用 jQuery 动态添加 textarea 元素
问题描述
我有一个带有一些选项的下拉列表。可以一次选择多个选项。选择某些选项时,会显示相应的隐藏 div。
现在我需要动态地将 a 添加textarea
到显示的 div 中——而不是所有的。如果取消选择某个选项,则相应的 div 将被隐藏,并且必须从中删除添加的 textarea 输入。我怎样才能做到这一点?
$("#dist").change(function() {
var optionValue = $(this).val();
if (optionValue) {
$(".dist-box").hide();
for (var k in optionValue) {
$('div.' + optionValue[k]).show();
}
} else {
$(".dist-box").hide();
}
}).change();
.dist-box {
color: #fff;
padding-top: 10px;
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<select name="dist[]" id="dist" class="dist" multiple="">
<option value="dih">dih</option>
<option value="vii">vii</option>
<option value="des">des</option>
</select>
<div id="dih" name="dih" class="dih dist-box" style="color: initial; display: none;">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
</div>
<div id="vii" name="vii" class="vii dist-box" style="color: initial; display: none;">
Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.
</div>
<div id="des" name="des" class="des dist-box" style="color: initial; display: none;">
Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus.
</div>
解决方案
为了实现您的需要,您可以.dist-box
在进行更改时隐藏所有元素,然后使用从 中选择的值select
来构建选择器字符串以定位所需的元素,然后将 textarea 附加到它们并显示它们:
$("#dist").change(function() {
$('.dist-box').hide().find('textarea').remove();
if (!this.value)
return;
let idSelector = $(this).val().map(v => `#${v}`).join(',');
$(idSelector).append(function() {
return `<textarea name="${this.id}"></textarea>`
}).show();
}).change();
.dist-box {
color: #fff;
padding-top: 10px;
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<select name="dist[]" id="dist" class="dist" multiple="">
<option value="dih">dih</option>
<option value="vii">vii</option>
<option value="des">des</option>
</select>
<div id="dih" class="dih dist-box" style="color: initial; display: none;">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
</div>
<div id="vii" class="vii dist-box" style="color: initial; display: none;">
Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.
</div>
<div id="des" class="des dist-box" style="color: initial; display: none;">
Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus.
</div>
话虽如此,textarea
元素的动态附加似乎几乎完全是多余的,因为textarea
当父级可见时它们始终存在.dist-box
,因此您可以将它们保留在 DOM 中但与父级一起隐藏。
推荐阅读
- c++ - 合并静态库时 ar 命令不生成索引
- javascript - 如何使用 jspdf、html2pdf、pdfmaker、html2canvas 以外的 javascript 库生成 pdf?
- android - 在加载片段之前检查视图是否存在
- c# - 加载多个场景添加剂使合成器发挥作用(Steam VR Unity)
- codeigniter - 如何从 PHP Codeigniter 控制器调用 Java Rest API?
- ios - 如何使用 swiftjson 获取 [approve "] [" id "] 的值?
- kotlin - Neo4j OGM - 在 Kotlin 中反序列化枚举列表
- c - 为什么没有换行符 printf 不起作用?
- c++ - clang 在 Xcode 中以 Release 模式编译 .cpp 时崩溃,但在调试中正常
- postgresql - 从 EAV 结构结果集中选择 JSON 值