根据表格内容创建 select 选项下拉列表

create a select option dropdown based on the tables content

下面是我的代码片段,它根据 table 上存在的数据创建了一个 select 选项下拉列表,它工作正常而不是我不想复制该选项,例如如果已经有 "medicine 1 or option value medicine_1" 则不要再次添加,简而言之如果存在相同的选项则不要追加。请提供任何帮助、想法、线索、建议、建议?

$(document).ready(function () {
    $("button").click(function () {
        $("table tr").each(function () {
            $("select").append('<option value="' + $(this).find("td:nth-child(2)").text().toLowerCase().replace(" ", "_") + '">' + $(this).find("td:nth-child(2)").text() + '<option>');
        });

    });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select></select>
<button>create</button>
<table>
    <tr>
        <td>id 1</td>
        <td>medicine 1</td>
    </tr>
    <tr>
        <td>id 1</td>
        <td>medicine 2</td>
    </tr>
    <tr>
        <td>id 1</td>
        <td>medicine 1</td>
    </tr>
    <tr>
        <td>id 1</td>
        <td>medicine 2</td>
    </tr>
    <tr>
        <td>id 1</td>
        <td>medicine 3</td>
    </tr>
</table>

您可以检查是否已经有一个具有欺骗值的选项:

$(document).ready(function() {
  $("button").click(function() {
    $("table tr").each(function() {
      var value = $(this).find("td:nth-child(2)").text().toLowerCase().replace(" ", "_");
      if ($("select").find('option[value=' + value + ']').length) return;
      $("select").append('<option value="' + value + '">' + $(this).find("td:nth-child(2)").text() + '</option>');
    });
  });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select></select>
<button>create</button>
<table>
  <tr>
    <td>id 1</td>
    <td>medicine 1</td>
  </tr>
  <tr>
    <td>id 1</td>
    <td>medicine 2</td>
  </tr>
  <tr>
    <td>id 1</td>
    <td>medicine 1</td>
  </tr>
  <tr>
    <td>id 1</td>
    <td>medicine 2</td>
  </tr>
  <tr>
    <td>id 1</td>
    <td>medicine 3</td>
  </tr>
</table>

$(document).ready(function() {
  $("button").click(function() {
    var arr = [];
    $("table tr").each(function() {
      var option = $(this).find("td:nth-child(2)").text();
      if ($.inArray(option, arr) == -1) { //check if id value not exits than add it
        arr.push(option);

        $("select").append('<option  value="' + option + '">' + option + '</option>');
      }
    });

  });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>



<select>


</select>


<button>create</button>


<table>
  <tr>
    <td>id 1</td>
    <td>medicine 1</td>
  </tr>
  <tr>
    <td>id 1</td>
    <td>medicine 2</td>
  </tr>
  <tr>
    <td>id 1</td>
    <td>medicine 1</td>
  </tr>
  <tr>
    <td>id 1</td>
    <td>medicine 2</td>
  </tr>
  <tr>
    <td>id 1</td>
    <td>medicine 3</td>
  </tr>
</table>

这样试试 创建一个数组。检查值是否存在于数组中,如果不存在,则将值添加到数组中,如果存在,则不添加到选项中。

更新

as @balachandar 请注意,您在 select

中关闭选项时遇到问题

这里是 JSFiddle 使用 .unique():

$(document).ready(function(){

      $("button").click(function(){
          var items=[], options=[];

            //Iterate all td's in second column
            $('td:nth-child(2)').each( function(){
               //add item to array
               items.push( $(this).text() );       
            });

            //restrict array to unique items
            var items = $.unique( items );

            //iterate unique array and build array of select options
            $.each( items, function(i, item){
                options.push('<option value="' + item.toLowerCase().replace(" ", "_") + '">' + item + '</option>');
            });

            //finally empty the select and append the items from the array
            $('select').empty().append( options.join() );

      });
});

您只需要添加一个函数来检查该值是否已存在于下拉列表中:

var optionExists = function optionExists(select, value) {
  var found = false;
  select.find('option').each(function(option) {
    if ($(this).val() === value && !found) {
      found = true;
    }

  });
  return found;
}

非常简单,您只需在添加新选项之前循环遍历下拉列表中所有现有选项来检查值。

$(document).ready(function() {
  $("button").click(function() {
    $("table tr").each(function() {
      var value = $(this).find("td:nth-child(2)").text().toLowerCase().replace(" ", "_");
      if (!optionExists($("select"), value)) {
        $("select").append('<option value="' + value + '">' + $(this).find("td:nth-child(2)").text() + '</option>');

      }
    });

  });
})

var optionExists = function optionExists(select, value) {
  var found = false;
  select.find('option').each(function(option) {
    if($(this).val() === value && !found){
      found = true;   
    }

  });
  return found;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>



<select>


</select>


<button>create</button>


<table>
  <tr>
    <td>id 1</td>
    <td>medicine 1</td>
  </tr>
  <tr>
    <td>id 1</td>
    <td>medicine 2</td>
  </tr>
  <tr>
    <td>id 1</td>
    <td>medicine 1</td>
  </tr>
  <tr>
    <td>id 1</td>
    <td>medicine 2</td>
  </tr>
  <tr>
    <td>id 1</td>
    <td>medicine 3</td>
  </tr>
</table>