简体   繁体   English

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

[英]How to check if element already exists on list

I have the following JS file: 我有以下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 Codepen: http ://codepen.io/brunomonteiro3/pen/vGdJVR

As you can see, when a <li> option is clicked, it clone the element to another list. 如您所见,单击<li>选项时,会将元素克隆到另一个列表。 But I want to make sure if an item is already listed, it will not be listed again. 但是,我想确保如果某项已被列出,它将不会再次列出。

What would be the best option to verify it? 验证的最佳选择是什么?

Check if the item already exists using filter funcition. 使用filter检查该项目是否已经存在。

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

DEMO 演示

You should add a class or other identity attribute to each different item, and search for it: 您应该为每个不同的项目添加一个类或其他标识属性,并进行搜索:

 $(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); } }); }); 
 <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> 


If you can not change your HTML, you can track already added items, for example: 如果无法更改HTML,则可以跟踪已添加的项目,例如:

 $(function(){ var $target = $(".append").first(); $('.filter-opts .opt').click(function(){ if (!$(this).prop("alreadyAdded")) { $(this).clone().appendTo($target); $(this).prop("alreadyAdded", true); } }); }); 
 <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> 

Here is one solution: 这是一种解决方案:

(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 Codepen示范

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM