【问题标题】:jquery: convert textarea (separated by new lines) to select option menujquery:将textarea(由新行分隔)转换为选择选项菜单
【发布时间】:2017-02-28 10:03:12
【问题描述】:

这是demo jsfiddle

我已经试过了:

$('.generate').click(function () {
    $('.inthis').text('<select class="select" id="' + $('.select-menu').val() + '"><option>' + $('.text-area').val().split('\n') + '</option><option>' + $('.text-area').val().split('\n') + '</option><option>' + $('.text-area').val().split('\n') + '</option></select>');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name="Text1" type="text" value="option_one" class="select-menu">
<br>
<textarea class="text-area" name="Text2" cols="40" rows="5" placeholder="enter one wdg in one line">green
yellow
blue</textarea>
<br>
<input class="generate" type="button" value="test" />
<br>
<br>
<div class="inthis"></div>

但它不起作用。

我想变成这样:

<select class="select" id="option_one">
<option>green</option>
<option>yellow</option>
<option>blue</option>
</select>

【问题讨论】:

  • 使用.html() 而不是.text()
  • .text() 呈现为纯文本。使用 .html() 因为您需要显示 HTML 元素。
  • jsfiddle.net/1xqutsjk/1 - 渲染 html 元素时的用户 .html()
  • 通过添加自己的答案来删除已接受的答案是一件非常糟糕的事情 - 特别是当您添加的答案遵循与已添加的答案相似的逻辑时,但实际上根本不起作用。跨度>

标签: javascript jquery


【解决方案1】:

首先,使用text() 将设置元素的文本值。如果你想在其中创建一个新元素,那么你可以使用html(),或append(),或任何jQuery 的其他DOM 操作方法。在下面的示例中,我使用了appendTo(),因此我可以维护对添加的select 的引用。

从那里您可以split() 每行的textarea然后循环遍历该数组以将每行的值构建为自己的option。试试这个:

$('.generate').click(function() {
  var $select = $('<select class="select" id="' + $('.select-menu').val() + '" />').appendTo('.inthis');
  
  var options = $('.text-area').val().split('\n').map(function(value) {
    return '<option>' + value + '</option>';
  });
  $select.html(options.join(''));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name="Text1" type="text" value="option_one" class="select-menu">
<br>
<textarea class="text-area" name="Text2" cols="40" rows="5" placeholder="enter one wdg in one line">green
yellow
blue</textarea><br>
<input class="generate" type="button" value="test" /><br><br>
<div class="inthis"></div>

【讨论】:

    【解决方案2】:

    $('.generate').click(function() {
    
    var options = $('.text-area').val().split('\n')
    
      $('.inthis').html('<select class="select" id="' + $('.select-menu').val() + '"><option>' + options[0] + '</option><option>' +  options[1] + '</option><option>' +  options[2] + '</option></select>');
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input name="Text1" type="text" value="option_one" class="select-menu">
    <br>
    <textarea class="text-area" name="Text2" cols="40" rows="5" placeholder="enter one wdg in one line">green
    yellow
    blue</textarea>
    <br>
    <input class="generate" type="button" value="test" />
    <br>
    <br>
    <div class="inthis"></div>

    使用.html() 不是.text()

    【讨论】:

    • 不是为了让我满意,而是为了以后可能不明白为什么这个答案被接受的访问者
    • 如果选项超过3个或空行怎么办?
    【解决方案3】:

    文本顾名思义不适用于 html 或 jQuery 对象。

    我使用 jQuery 语法创建对象并忽略文本区域中的空行

    $('.generate').on("click", function() {
      var $sel = $('<select />', {
          "class": "select",
          "id": $('.select-menu').val()
        }),
        opts = $('.text-area').val().split('\n').map(
          function(val) {
            if (val) return $('<option/>', {
              "value": val,
              "text": val
            });
          });
      $sel.append(opts);
      $('.inthis').html($sel);
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input name="Text1" type="text" value="option_one" class="select-menu">
    <br>
    <textarea class="text-area" name="Text2" cols="40" rows="5" placeholder="enter one wdg in one line">green
    yellow
    
    blue</textarea>
    <br>
    <input class="generate" type="button" value="test" />
    <br>
    <br>
    <div class="inthis"></div>

    【讨论】:

      【解决方案4】:

      试试这个:

      $('.generate').click(function () {
      	var options = $('.text-area').val().split('\n').map(function(value) {
          return '<option>' + value + '</option>';
        });
          $('.inthis').text('<select class="select" id="' + $('.select-menu').val() + '">' + options.join('') + '</select>');
      });
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <input name="Text1" type="text" value="option_one" class="select-menu">
      <br>
      <textarea class="text-area" name="Text2" cols="40" rows="5" placeholder="enter one wdg in one line">green
      yellow
      blue</textarea>
      <br>
      <input class="generate" type="button" value="test" />
      <br>
      <br>
      <div class="inthis"></div>

      【讨论】:

      • 与其他可行的相同解决方案相比,这里的附加价值在哪里?
      猜你喜欢
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多