使用 jQuery 动态附加 textarea 元素 [英] Dynamic appending of the textarea elements with jQuery

查看:17
本文介绍了使用 jQuery 动态附加 textarea 元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含一些选项的下拉列表.可以一次选择多个选项.选择某些选项时,显示了相应的隐藏Div.

现在我需要将 textarea 动态添加到显示的 div - 而不是全部.如果取消选择某个选项,则隐藏相应的 div,并且必须从中删除添加的 textarea 输入.我该怎么做?

$("#dist").change(function() {var optionValue = $(this).val();如果(选项值){$(".dist-box").hide();for (var k in optionValue) {$('div.' + optionValue[k]).show();}} 别的 {$(".dist-box").hide();}}).change();

.dist-box {颜色:#fff;填充顶部:10px;显示:无;}

<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></选择><div id="dih" name="dih" class="dih dist-box" style="color: initial; display: none;">Lorem ipsum dolor 坐 amet,consectetuer adipiscing 精英.Aenean commodo ligula eget dolor.埃尼马萨.Cum sociis natoque penatibus et magnis disparturient montes, nascetur ridiculus mus.

<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.在 enim justo、rhoncus ut、imperdiet a、venenatis vitae、justo.

<div id="des" name="des" class="des dist-box" style="color: initial; display: none;">Nullam dictum felis eu pede mollis pretium.整数提示.Cras dapibus.Vivamus elementum semper nisi.Aenean vulputate eleifend Tellus.

https://jsfiddle.net/u3tm7b0r/1/

解决方案

为了实现您的需要,您可以在进行更改时隐藏所有 .dist-box 元素,然后使用选定的值从 select 构建一个选择器字符串以定位所需的字符串,然后将 textarea 附加到它们并显示它们:

$("#dist").change(function() {$('.dist-box').hide().find('textarea').remove();如果(!this.value)返回;让 idSelector = $(this).val().map(v => `#${v}`).join(',');$(idSelector).append(function() {return `<textarea name="${this.id}"></textarea>`}).展示();}).change();

.dist-box {颜色:#fff;填充顶部:10px;显示:无;}

<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></选择><div id="dih" class="dih dist-box" style="color: initial; display: none;">Lorem ipsum dolor 坐 amet,consectetuer adipiscing 精英.Aenean commodo ligula eget dolor.埃尼马萨.Cum sociis natoque penatibus et magnis disparturient montes, nascetur ridiculus mus.

<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.在 enim justo、rhoncus ut、imperdiet a、venenatis vitae、justo.

<div id="des" class="des dist-box" style="color: initial; display: none;">Nullam dictum felis eu pede mollis pretium.整数提示.Cras dapibus.Vivamus elementum semper nisi.Aenean vulputate eleifend Tellus.

话虽如此,textarea 元素的动态附加似乎完全是多余的,因为 textarea 总是在父 .dist-box 是可见的,因此您可以将它们保留在 DOM 中,但与父级一起隐藏.

I have a drop-down list with some options. Multiple options can be selected at once. When some options are selected the corresponding hidden divs are shown.

Now I need to dynamically add a textarea to the shown divs - not to all of them. If an option is deselected the corresponding div is hidden and the added textarea input must be removed from it. How can I do that?

$("#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>

https://jsfiddle.net/u3tm7b0r/1/

解决方案

To achieve what you need you can hide all the .dist-box elements when a change is made, then use the selected values from the select to build a selector string to target the required ones, before appending the textarea to them and displaying them:

$("#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>

That being said, the dynamic appending of the textarea elements seems almost entirely redundant, as the textarea are always present when the parent .dist-box is visible, so you could just leave them present in the DOM but hidden along with the parent.

这篇关于使用 jQuery 动态附加 textarea 元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
前端开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆