javascript - 防止在 jQuery 中附加重复的内容

标签 javascript jquery html

请看这个fiddle .

我一直在研究将文本附加到 div#area 的“全部添加”按钮。谁能告诉我如何使用 if 条件来防止重复文本添加到该区域?在 fiddle 示例中,我不希望将“A”、“B”附加到该区域两次。

HTML:

<div class="addarea">
<div class="add">A</div>
<div class="add">B</div>
<div class="add">C</div>
<div class="add">D</div>
    <button class="addall">Add All</button>
</div>

<div class="addarea">
<div class="add">A</div>
<div class="add">B</div>
<div class="add">F</div>
<div class="add">G</div>
    <button class="addall">Add All</button>
</div>

<button id="remove">Remove</button>

<div id="area"></div>

失败的代码:

$('.addall').click(function(){
  var add = $(this).closest('.addarea').find('.add');
  add.each(function(){
    var copy = $(this).clone(),
        content = $(this).text();
    if($('#area').find('.add').text() == content){          
          return false;
      }
      else
      {
         $('#area').append(copy);
      }
 });
});

$('#remove').click(function(){
 $('#area').find('div').remove();
});

最佳答案

您可以使用 :contains() 选择器在循环中查找与当前 DIV 具有相同文本的 DIV。

$('.addall').click(function(){
    var add = $(this).closest('.addarea').find('.add');
    add.each(function(){
        var content = $(this).text();
        if ($('#area > div:contains('+content+')').length == 0) {
            $('#area').append($(this).clone());
        }
    });
});

DEMO

请注意,这仅适用于您的应用程序,因为 DIV 仅包含一个字母。 :contains(X) 查找 DIV,其中 X 是任何子字符串,而不是全部内容。

在查找匹配项时不应使用return false,因为这将终止循环,而不仅仅是当前迭代。

关于javascript - 防止在 jQuery 中附加重复的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24584850/

相关文章:

javascript - jQuery.post 使用当前位置的修改后的 url,而不是提供的 url

javascript - 为什么在 Canvas 上填充矩形会缓慢降低性能?

python - Sqlite从数据库中操作字符串

javascript - 结合href Bootstrap自动执行数据切换

javascript - Bootstrap 多选搜索无法正常工作

javascript - 如何在 JavaScript Web 客户端中播放 PCM 流(通过 UDP)?

javascript - onclick 事件在 IE8 中被破坏

javascript - 使用 sortable.js 时禁用 bootstrap wysihtml5

javascript - 赫罗库 : Firebase can't load credentials

javascript - 输入文字时的提示