只替换第一次出现的单词

我有一个单词列表。如果文档中出现这些词之一,则匹配需要替换为链接。到目前为止,我已经完成了这项工作,但脚本替换了所有出现的情况。当第一个单词被替换并继续下一个词时,我如何通过停止循环来防止这种情况?

编辑:将代码嵌入到一个片段中:

$(document).ready(function(){
  
    function replaceWordsWithLinks(_glossaryWords, _language) {

    $.each(_glossaryWords, function (index, wordobject) {
      console.log(wordobject.name);

      var link = '<a class="link link--glossary" title="Open Glossary" data-glossaryid="' + wordobject.link_id + '" data-language="' + _language + '">' + wordobject.name + '</a>';

      $('p').html(function () {
        if (!$(this).parents('.glossary-no-replace').length) {
          return $(this).one().html().replace(wordobject.name, link);
        }
      });
      $('span').html(function () {
        if (!$(this).hasClass('glossary-no-replace') || !$(this).parent().attr('class') == 'breadcrumb' || !$(this).parent().attr('class') == 'glossary-no-replace') {
          return $(this).html().replace(wordobject.name, link);
        }
      });
      $('dd').html(function () {
        if ($(this).parent().attr('class') !== 'glossary-no-replace') {
          return $(this).html().replace(wordobject.name, link);
        }
      });

    });

  }

  var glossary_entries = null;
  var $glossaryElement = $('#glossary-element');

  glossary_entries = $glossaryElement.data('elements');
  var current_glossary_language = null;
  current_glossary_language = $glossaryElement.data('language');

  if (glossary_entries !== null) {
    $glossaryElement.remove();
    replaceWordsWithLinks(glossary_entries, current_glossary_language);
  }
  
})
* {
  box-sizing: border-box;
}

html {
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

body {
  padding: 50px;
}

p {
  max-width: 700px;
  display: block;
  margin: 0 auto;
  font: normal 18px/1.5 serif;
}
p + p {
  margin-top: 30px;
}

.link {
  color: #bf6a40;
}
.link:hover {
  color: #40bf80;
}

.link--glossary {
  cursor: help;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<p>lorem dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet</p>
<p>lorem dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet</p>
<p>lorem dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet</p>
<div><div class="hidden" id="glossary-element" data-elements='{"1":{"name":"ipsum","link_id":1007},"2":{"name":"lorem","link_id":1006},"3":{"name":"amet","link_id":1005},"4":{"name":"sea","link_id":1005},"5":{"name":"takimata sanctus","link_id":1005}}'></div></div>

查理特

我会过滤掉与:contains选择器匹配的每个标签如果您在标签中找到匹配项,请忽略其他标签。然后用于first()隔离匹配集合的第一个实例

就像是:

var $el;

var $pHasWord =
  $('p').not('.glossary-no-replace')
        .filter(':contains(' + wordobject.name + ')');      

if ($pHasWord.length) {
  $el = $pHasWord;

} else {

  var $spanHasWord =
    $('span').not('.glossary-no-replace, .breadcrumb span')
             .filter(':contains(' + wordobject.name + ')');

  if ($spanHasWord.length) {
    $el = $spanHasWord;
  } else {

    $el =
      $('dd').not('.glossary-no-replace dd')
             .filter(':contains(' + wordobject.name + ')');
  }
}

if ($el) {
  $el.first().html(function(_, existHtml) {
    return existHtml.replace(wordobject.name, link);
  });
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

替换每行中的第一次出现

来自分类Dev

QString只替换第一次出现

来自分类Dev

CSS:选择包含特定单词的链接的第一次出现

来自分类Dev

sed:用换行符替换第一次出现的空间

来自分类Dev

jQuery的焦点行事奇怪,只在第一次

来自分类Dev

如何只返回第一次出现的ID与猫鼬?

来自分类Dev

Powershell-替换第一次出现的String

来自分类Dev

pd.Series替换第一次出现

来自分类Dev

使用RE替换文本-允许第一次出现,其余部分替换

来自分类Dev

正则表达式只正确地拉第一次出现

来自分类Dev

如何只匹配行中第一次出现的空间

来自分类Dev

单词只被替换一次

来自分类Dev

在第一次出现特定单词后,用sed替换带引号的可打印换行符(= \ n)

来自分类Dev

如何只返回第一次出现的ID与猫鼬?

来自分类Dev

Powershell-替换第一次出现的String

来自分类Dev

仅替换第一次出现

来自分类Dev

正则表达式全局替换不替换第一次出现

来自分类Dev

我循环只经过第一次迭代

来自分类Dev

查找并替换第一次出现的空格

来自分类Dev

jQuery draggable - 只记住第一次拖动

来自分类Dev

Swift Scroll to UITextField 通过 UiscrollView 只在第一次出现错误

来自分类Dev

正则表达式第一次出现在单词之前

来自分类Dev

使用python只更新队列中第一次出现的对象而不会中断

来自分类Dev

正则表达式:匹配以某些字符开头的单词的第一次出现

来自分类Dev

在每个单词中查找给定/特定字符的第一次出现

来自分类Dev

Jquery如何只找到第一次出现

来自分类Dev

如何从句子中的arraylist中获取任何单词第一次出现的索引

来自分类Dev

Jquery:只选择树中第一次出现的类

来自分类Dev

正则表达式只捕获括号内的第一次出现

Related 相关文章

  1. 1

    替换每行中的第一次出现

  2. 2

    QString只替换第一次出现

  3. 3

    CSS:选择包含特定单词的链接的第一次出现

  4. 4

    sed:用换行符替换第一次出现的空间

  5. 5

    jQuery的焦点行事奇怪,只在第一次

  6. 6

    如何只返回第一次出现的ID与猫鼬?

  7. 7

    Powershell-替换第一次出现的String

  8. 8

    pd.Series替换第一次出现

  9. 9

    使用RE替换文本-允许第一次出现,其余部分替换

  10. 10

    正则表达式只正确地拉第一次出现

  11. 11

    如何只匹配行中第一次出现的空间

  12. 12

    单词只被替换一次

  13. 13

    在第一次出现特定单词后,用sed替换带引号的可打印换行符(= \ n)

  14. 14

    如何只返回第一次出现的ID与猫鼬?

  15. 15

    Powershell-替换第一次出现的String

  16. 16

    仅替换第一次出现

  17. 17

    正则表达式全局替换不替换第一次出现

  18. 18

    我循环只经过第一次迭代

  19. 19

    查找并替换第一次出现的空格

  20. 20

    jQuery draggable - 只记住第一次拖动

  21. 21

    Swift Scroll to UITextField 通过 UiscrollView 只在第一次出现错误

  22. 22

    正则表达式第一次出现在单词之前

  23. 23

    使用python只更新队列中第一次出现的对象而不会中断

  24. 24

    正则表达式:匹配以某些字符开头的单词的第一次出现

  25. 25

    在每个单词中查找给定/特定字符的第一次出现

  26. 26

    Jquery如何只找到第一次出现

  27. 27

    如何从句子中的arraylist中获取任何单词第一次出现的索引

  28. 28

    Jquery:只选择树中第一次出现的类

  29. 29

    正则表达式只捕获括号内的第一次出现

热门标签

归档