如何检查列表中是否已存在元素

时间:2016-04-11 14:14:13

标签: javascript jquery html css

我有以下JS文件:

;(function ($) {    
    $('.filter-opts .opt').click(function(){
        var selectedName = $(this).html();
        $('.append').append('<li>' + selectedName + '</li>');
    });

    $(document).on('click', '.append li', function(){
        $(this).remove();
    });
})(jQuery);

Codepen: http://codepen.io/brunomonteiro3/pen/vGdJVR

如您所见,当单击<li>选项时,它会将该元素克隆到另一个列表。但我想确定一个项目是否已经列出,它将不再列出。

验证它的最佳选择是什么?

3 个答案:

答案 0 :(得分:2)

使用filter功能检查项目是否已存在。

exist = $('.append li').filter(function() {
  return $(this).text() == selectedName
});
if (!exist.length)
  $('.append').append('<li>' + selectedName + '</li>');

DEMO

答案 1 :(得分:1)

您应该为每个不同的项添加一个类或其他标识属性,然后搜索它:

&#13;
&#13;
$(function(){
    var $target = $(".append").first();
    $('.filter-opts .opt').click(function(){
        var name = $(this).attr("data-name");
        if ($target.find('[data-name="' + name + '"]').size() == 0) {
            $(this).clone().appendTo($target);
        }
    });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul class="filter-opts">
  <li class="opt" data-name="o1">Option 1</li>
  <li class="opt" data-name="o2">Option 2</li>
  <li class="opt" data-name="o3">Option 3</li>
  <li class="opt" data-name="o4">Option 4</li>
</ul>

<h2>Appended:</h2>

<ul class="append">
</ul>
&#13;
&#13;
&#13;

如果您无法更改HTML,则可以跟踪已添加的项目,例如:

&#13;
&#13;
$(function(){
    var $target = $(".append").first();
    $('.filter-opts .opt').click(function(){
        if (!$(this).prop("alreadyAdded")) {
            $(this).clone().appendTo($target);
            $(this).prop("alreadyAdded", true);
        }
    });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul class="filter-opts">
  <li class="opt">Option 1</li>
  <li class="opt">Option 2</li>
  <li class="opt">Option 3</li>
  <li class="opt">Option 4</li>
</ul>

<h2>Appended:</h2>

<ul class="append">
</ul>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这是一个解决方案:

(function($) {
  var $secondList = $('.append');
  $('.filter-opts .opt').click(function() {
    var selectedName = $(this).text();
    if (!$secondList.find('li:contains("' + selectedName + '")').length) {
      $secondList.append('<li>' + selectedName + '</li>');
    }
  });

  $(document).on('click', '.append li', function() {
    $(this).remove();
  });
})(jQuery);

Codepen demo

相关问题