首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Mark.js标记整句话

用Mark.js标记整句话
EN

Stack Overflow用户
提问于 2016-11-16 13:19:10
回答 1查看 946关注 0票数 2

编辑2016年11月18日:

我希望基于一个简单的条件在文本区域中标记整个句子(如果句子长度超过n-文本应该被标记)。

我怀疑如何用mark.js标记整个句子。在@dude的帮助下,这是解决方案:

参见Mark (@MarkBuskbjerg)在CodePen上的钢笔@MarkBuskbjerg

HTML

代码语言:javascript
复制
<div id="textArea" contenteditable="true">
    Any text you want...
</div>

JavaScript

代码语言:javascript
复制
$(document).ready(function() {
var rawText = $("#textArea").html();
var sentenceArray = rawText.split(".");
var matchWarning = [];
var longSentence = 16;
var words;
var wordCounter;

for (var i in sentenceArray) {
    words = sentenceArray[i].split(" ");
    wordCounter = words.length;
    if (wordCounter > longSentence) {
        matchWarning.push(sentenceArray[i]);
    }
}

    $("#textArea").mark(matchWarning, {
        "separateWordSearch": false,
    });
});

通过设置"seperateWordSearch":false,整个句子作为一个整体被mark.js标记

原始帖子:,我一直在使用https://markjs.io/标记输入字段中的长单词。

设置非常简单。

现在我正试着根据长度来标记整个句子。

问题是,如果我插入一个字符串,MarkJS会遍历字符串中的每个单词,并将它们与整个文本进行匹配。

只有当整个句子与MarkJS匹配时,有人能想到做标记的方法吗?

以下是我最接近的解决方案之一:)

HTML:

代码语言:javascript
复制
<div id="myTextArea" contenteditable="true">
Indsæt din tekst her. Det her er bare en helt almindelig tekst, der ikke 
besidder de store armbevægelser. Den har dog eksempelvis en meget lang 
sætning, der mest af alt er lang, fordi der simpelthen skal være en rigtig 
lang sætning, der kan udløse en alarm for lange sætninger, når dette 
fantastiske stykke værktøj begynder at virke. Så nu er det bare i gang med 
at skrue på javascript knapper, så skal der nok ske noget. Sig det så. Sig 
hammertime.
</div>

(以上文字只是丹麦语中的胡言乱语)

JavaScript:

代码语言:javascript
复制
function warningLabel() {
    var rawText = $("#myTextArea").html();
    var sentenceArray = rawText.replace(/\n\r?/g, '<br />').split(". ");
    var matchWarning = new Array();

    for (var i in sentenceArray) {
        if (sentenceArray[i].length > 100) {
            matchWarning.push(sentenceArray[i]);
        }
    }

    var instance = new Mark(document.getElementById("myTextArea"));
    instance.mark(matchWarning.toString(), {
        "accuracy": "exactly",
    }); 
}

作为一个注意事项,我已经为它自己编写了功能。但是,由于我已经将MarkJS用于本项目中的其他内容,所以最好继续使用现有代码,而不是生成新的:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-17 09:47:06

首先,您似乎将jQuery和普通JS混合在一起。在提供的代码末尾,您使用的是document.getElementById,而在顶部,您使用的是$(...)。如果您想使用jQuery,mark.js也可以用于jQuery。

其次,传递给mark.js的“文本”包含:

代码语言:javascript
复制
Den har dog eksempelvis en meget lang <br />sætning, der mest af alt er lang, fordi der simpelthen skal være en rigtig <br />lang sætning, der kan udløse en alarm for lange sætninger, når dette <br />fantastiske stykke værktøj begynder at virke

您应该只将文本传递给mark.js,因为<br />不是文本,当您要使用下面提到的解决方案时,它不会找到任何匹配项。

由于你没有提到你想做什么,我不能为你提供一个有用的小提琴。

无论如何,要单独找到整个文本而不是包含的单词,需要指定separateWordSearch选项:

代码语言:javascript
复制
var instance = new Mark(document.getElementById("myTextArea"));
instance.mark(matchWarning.toString(), {
    "accuracy": "exactly",
    "separateWordSearch": false
}); 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40633200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档