javascript - 在 mark.js 中突出显示另一个已突出显示的术语中的术语

标签 javascript jquery

我正在使用 mark.js图书馆为了做文本高亮。它工作正常,但我想知道如何突出显示一个术语两次。

该库允许用户为突出显示指定类名,所以据我了解,如果一个长术语被突出显示一次,稍后你想用不同的类突出显示该术语的子字符串(应用不同的style with css),这就是我遇到麻烦的地方。

我试过这个:

<div id="article">
  This is a dummy text including used in training systems
</div>

然后

longTerms = ["training systems"]
shortTerms = ["systems"]

longTerms.forEach(function(term) {

  $("#article").mark(term, {
    "className": "orange",
    "separateWordSearch": false,
    "accuracy": "exactly",
    "acrossElements": true
  });

});

shortTerms.forEach(function(term) {

  $("#article").mark(term, {
    "className": "underline",
    "separateWordSearch": false,
    "accuracy": "exactly",
    "acrossElements": true
  });

});

JSFiddle with the CSS

我成功地使用 .orange 类突出显示了“培训系统”,但我无法根据 .underline 为“系统”添加下划线> 类。

为什么我不能在已有类(class)的基础上再申请一门类(class)?

最佳答案

这不是正确的做法, 但是由于无法使用 mark.js 标记已标记的项目,您可以执行如下操作以使其暂时工作:

Updated Fiddle

longTerms = ["training systems"]
shortTerms = ["systems"]


longTerms.forEach(function(term) {

  $("#article").mark(term, {
    "className": "orange",
    "separateWordSearch": false,
    "accuracy": "exactly",
    "acrossElements": true
  });
}); 


markSubString('#article', 1 , 'orange underline');

function markSubString (parent, subStringIndex, classes) {
    var subElement = ' <mark data-markjs="true" class="' + classes + '">';
    var markedElement = $(parent + ' mark');
    var textToMark = markedElement[0].textContent;
    var allSubStrings = textToMark.split(' ');
    var newText = '';
    markedElement.text('');

    for(var i = 0; i < allSubStrings.length; i++){

     if(i === subStringIndex){
        newText += subElement + allSubStrings[i] + ' </mark>';
     } else {
        newText += allSubStrings[i] + ' ';
     }
   }

    markedElement.append(newText);
}

传递 parent 元素,如 #article 如果它是一个 id,需要标记的单词的索引在已经标记的实际字符串中需要添加的类名markSubString 方法。我刚刚写了一个基本的通用方法来做到这一点,它可以改进。

关于javascript - 在 mark.js 中突出显示另一个已突出显示的术语中的术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41462463/

相关文章:

javascript - 提交按钮不起作用/没有反应

javascript - 合并两个要共同引用的 HTML 元素对象

javascript - jQuery 自动完成显示相同的结果

Jquery自定义警报框

javascript - 是否将多个事件添加到内部 View 主干?

javascript - 如何将项目存储在 firebase 列表中的特定位置

javascript - 如何使用JS加载另一个html文件

javascript - 如何验证文本区域中的电子邮件地址

javascript - Jquery:隐藏所有子项,然后显示特定元素

javascript - 使用 AppleScript 和 Javascript 在 Safari 网页上单击 "div button"