【问题标题】:Word highlighting in the paragraph JQueryJQuery段落中突出显示的单词
【发布时间】:2017-05-24 17:58:07
【问题描述】:

我想做一个文本荧光笔:我的段落在qtext,我想在段落中突出显示的单词在answerCodes。我想为它们添加一个跨度类并在段落中突出显示它们。任何想法都会有所帮助!

    var answerCodes = $('[id*="_label"]').text(); 
    var qText = $('.question_text').html();
    for (var i=0; i<answerCodes.length; i++) {
        need to put something here...
    }   

【问题讨论】:

  • thisthis 可能会对您有所帮助。

标签: jquery


【解决方案1】:

根据答案码生成正则表达式,替换html内容。

// generate regex
var reg = new RegExp(
  // get all answer code elements
  $('[id*="_label"]')
  // iterate over them
  .map(function() {
    // get text content and
    // escape symbols which has special meaning in regex
    return $(this).text().replace(/[|\\{}()[\]^$+*?.]/g, '\\$&');    
  })
  // get result as array
  .get()
  // join them with pipe symbol
  .join('|'),
  // set global modifier for global match
  'g');


// iterate over p
$('.question_text').html(function(i, html) {
  // replace the question code with span wrapped content
  return html.replace(reg, '<span class="highliter">$&</span>');
});

var reg = new RegExp(
  $('[id*="_label"]').map(function() {
    return $(this).text().replace(/[|\\{}()[\]^$+*?.]/g, '\\$&');
  }).get().join('|'), 'g');


$('.question_text').html(function(i, html) {
  return html.replace(reg, '<span class="highliter">$&</span>');
});
.highliter {
  color: red
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label id="_label1">abc</label>
<label id="_label1">test</label>

<div class="question_text">a a a a abc bb b test dd abc fff</div>

【讨论】:

  • 很好的答案,但我还有一个问题:假设我有两个标签 abc 和 abc 测试,我想避免只选择 abc 并且不突出显示测试,所以我应该进行某种拆分对于'[id*="_label"]'?
  • @ZygimantasKairys:您需要先订购abc test...例如:jsfiddle.net/buhao7r2
  • 例如:
  • @ZygimantasKairys : jsfiddle.net/buhao7r2 你需要更新订单......
  • @ZygimantasKairys : 生成的正则表达式将是 /abc|abc test/g.... 所以 abc 得到匹配.....要匹配 abc test 你需要移动它并且正则表达式应该是 @987654331 @
【解决方案2】:

使用 RegExp 替换。

for (var i=0; i< answerCodes.length; i++) {
    qText = qText.replace(new RegExp(answerCodes[0], 'g'), '<span class="highlight">$1</span>');
}

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    相关资源
    最近更新 更多