搜索

首页  >  问答  >  正文

如何使用 javascript html 仅删除每个 ul 项目的重复 li 项目

我显示了一个动态生成的导航结构。每个位置都有从该位置的商店生成的商店类型。

我需要删除每个位置的重复项,以便杂货可以出现在两个位置。我尝试了下面常见的 jquery 解决方案,该解决方案删除了​​重复项,但它导致每个 storetype 仅出现在一个位置。

var seen = {};
$("ul#storetypes").find("li").each(function(index, html_obj) {
  txt = $(this).text().toLowerCase();

  if (seen[txt]) {
    $(this).remove();
  } else {
    seen[txt] = true;
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="menu">
  <li>Location 1
    <ul id="storetypes" class="sub-menu">
      <li>groceries</li>
      <li>cakes</li>
      <li>motor spares</li>
      <li>groceries</li>
    </ul>
  </li>
  <li>Location 2
    <ul class="sub-menu">
      <li>groceries</li>
      <li>motor spares</li>
      <li>motor spares</li>
      <li>groceries</li>
    </ul>
  </li>
</ul>

P粉418214279P粉418214279262 天前424

全部回复(1)我来回复

  • P粉432906880

    P粉4329068802024-03-30 13:11:38

    你可以这样做:

    $("ul.sub-menu li").each(function(index, html_obj) {
      if ($(this).prevAll(":contains(" + $(this).text() + ")").length > 0) {
        $(this).remove();
      }
    });

    这将查看每个 .sub-menu 并查看是否存在具有相同文本的“li”,并删除重复的内容。

    演示

    $("ul.sub-menu li").each(function(index, html_obj) {
      if ($(this).prevAll(":contains(" + $(this).text() + ")").length > 0) {
        $(this).remove();
      }
    });
    sssccc
    

    回复
    0
  • 取消回复