javascript - 我想如果有 2 个元素具有相同的文本,一个在 jquery 中被删除

标签 javascript jquery html css

当用户选择一个选项时,我试图让它的文本在另一个段落中

我想如果用户两次选择相同的选项它的文本不会再次复制到段落中

$('.cho-skills').on('change', function() {

  $('.al-skils').append($('.formss .bio .append-p .eac-p').clone(true).removeClass('disp-no'));

  $('.formss .bio .each-sk').last().text($('.cho-skills').val());

});

$('.formss .bio .eac-p i').on('click', function() {

  $(this).parents('.eac-p').remove();

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="select-inp cho-skills">
  <option value="1">Choose your skills *</option>
  <option>skill 1</option>
  <option>skill 2</option>
  <option>skill 3</option>
</select>

<div class="skil-inbio">
  <div class="al-skils">
    <div class="append-p disp-no">

      <div class="eac-p">
        <p class="each-sk"></p>
        <i class="fas fa-times"></i>
      </div>

    </div>
  </div>
  <hr>
</div>

最佳答案

您没有提供将 p 元素附加到何处的信息,因此在我的示例中,我将它们附加到 .eac-p 中。您应该能够根据需要配置它。

$('.cho-skills').on('change', function() {
  var val = $(this).val();
  if(!$('.eac-p > p:contains("'+val+'")').length) {
  	$(".eac-p").append("<p>" + val + "</p>");
  }
})

$(document).on("click", ".eac-p > p", function() {
  $(this).remove();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="select-inp cho-skills">
  <option value="1">Choose your skills *</option>
  <option>skill 1</option>
  <option>skill 2</option>
  <option>skill 3</option>
</select>

<div class="skil-inbio">
  <div class="al-skils">
    <div class="append-p disp-no">

      <div class="eac-p">

      </div>

    </div>
  </div>
  <hr>
</div>

让我们来看看这个:

  1. 您设置了一个onchange 事件监听器。
  2. var val 是您的option 的值。
  3. 接下来我们检查一个元素是否已经存在。为此,我们使用 CSS 伪类 :contains。 JQuery 将返回包含值 ($('.eac-p > p:contains("'+val+'")')) 的所有元素的数组。如果数组为空,则没有找到任何元素,但如果有一个元素,它将返回元素。因此,让我们检查 length 以查看是否找到元素 ($('.eac-p > p:contains("'+val+'")').length )
  4. 记住:0 等于 false!你看到 ! 了吗?这类似于使用 == false。因此,您也可以编写 $('.eac-p > p:contains("'+val+'")').length == false。但这并不重要。
  5. 因此,如果数组为空且未找到任何元素,该函数将附加您的 p
  6. 其余代码用于在单击后删除 p

编辑

$('.cho-skills').on('change', function() {
  var val = $(this).val();
  if (!$('.eac-p > p:contains("' + val + '")').length) {
    var temp = $(".append-p.disp-no").clone();
    temp.removeClass("disp-no").find("p").text(val);

    $(".al-skils").append(temp);
  }
})

$(document).on("click", ".append-p .eac-p > p", function() {
  $(this).closest(".append-p").remove();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="select-inp cho-skills">
  <option value="1">Choose your skills *</option>
  <option>skill 1</option>
  <option>skill 2</option>
  <option>skill 3</option>
</select>

<div class="skil-inbio">
  <div class="al-skils">
    <div class="append-p disp-no">

      <div class="eac-p">
        <p class="each-sk"></p>
        <i class="fas fa-times"></i>
      </div>

    </div>
  </div>
  <hr>
</div>

在这次编辑中,我们使用了不同的方法。我们克隆元素并将其设置为变量。重要提示:变量实际上不是这个元素:

<div class="append-p disp-no">
  <div class="eac-p">
     <p class="each-sk"></p>
     <i class="fas fa-times"></i>
   </div>
</div>

该变量是一个尚未附加的完整新元素。 然后我们更改我们的需求并附加它。

关于javascript - 我想如果有 2 个元素具有相同的文本,一个在 jquery 中被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55891158/

相关文章:

php - jQuery Ajax = 成功返回页面

javascript - jQuery - 在选择更改时清除文本区域

c# - 在没有 ID 或名称的输入提交时触发 'click' 事件?

javascript - (rails) moment 对象显示为正在突变,但 .hours() 是正确的

javascript - Ajax Post 请求 MVC

Javascript浅拷贝

javascript - 访问 HTMLcollection 时获取 null

javascript - .live() 绑定(bind)对 IE7 中的 jQuery 有效吗?

php - 将 <a> 标签链接添加到您的 Twitter XML feed

javascript - 获取搜索框以过滤结果