【问题标题】:Best way to replace/remove text from a string inside an li tag从 li 标签内的字符串中替换/删除文本的最佳方法
【发布时间】:2016-08-10 04:57:32
【问题描述】:

我正在 ExpressionEngine 中处理站点地图列表(所以我没有太多关于如何呈现事物的灵活性)并且我需要从字符串中删除单词 'Parent' 如果它存在。

以下是 HTML 输出示例:

<li class="sitemap-item">
  <a href="">About Us Parent</a>

  <ul>
    <li class="sitemap-item">
      <a href="">About Us</a>

      <ul>
        <li class="sitemap-item">
          <a href="http://website.dev/about-us/meet-the-directors">Meet the Directors</a>

        </li>

        <li class="sitemap-item">
          <a href="">Partners</a>

        </li>

        <li class="sitemap-item">
          <a href="">Accreditation &amp; Awards</a>

        </li>

        <li class="sitemap-item">
          <a href="">Testimonials</a>

        </li>

        <li class="sitemap-item">
          <a href="http://website.dev/careers">Careers</a>

        </li>

      </ul>
    </li>

  </ul>
</li>

我尝试了以下 jQuery,但没有成功,只是根本没有替换这个词:

$(document).ready(function(){
    if($('li:contains("Parent")')){
    $(this).replace('Parent','');
  };
});

如您所见,我正在尝试使用 jQuery 来执行此操作。任何人都可以阐明执行此操作的正确方法吗?

【问题讨论】:

  • 所以你希望得到一个嵌套在另一个About Us中的About Us???
  • 抱歉回复晚了,午休!哈哈。是的,这是正确的,因为父类别可以有许多子类别

标签: jquery


【解决方案1】:

jQuery 没有replace 方法,它是字符串的本机方法,这意味着您必须首先将文本作为字符串,例如text(),然后返回改变的字符串又回来了

$(document).ready(function(){
    $('li > a:contains("Parent")').text(function(_, txt) {
        return txt.replace('Parent','');
    });
});

【讨论】:

  • 但是您以这种方式完全破坏了 HTML 标记。在这种情况下,选择器应该是:'li &gt; a:contains("Parent")'
  • @A.Wolff - 没错,LI 中的整个标记将被文本替换,并对其进行编辑。
【解决方案2】:

您可以将replace() 方法与正则表达式一起使用,以确保替换该单词的所有实例。带字符串的replace() 仅替换第一次出现。

$(document).ready(function(){
  var elements = $('li');
  elements.html(elements.html().replace(/Parent/gi, ''));
});

【讨论】:

  • 缺点是您可以取消绑定到这些 LI 元素的任何以前的事件/数据
  • 确实如此。理想情况下,他会使用更接近$('li.sitemap-item &gt; a') 的选择器。
猜你喜欢
  • 2015-10-09
  • 1970-01-01
  • 2013-12-26
  • 2021-09-20
  • 2011-10-16
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多