繁体   English   中英

用span vanilla Java语言换行

[英]wrap word in span vanilla Javascript

我有一个返回单词列表的函数(带有上一个和下一个qord)。 我能够使用RegEx正确定位文本中的单词,并且知道上一个单词和下一个单词(因此我只能找到一次该单词,而并非全部相同)。 我实际上正在使用Javascript的替换功能将其包装在SPAN中:

var re = RegExp("(?:^\\W*|(" + 
    motBefore.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") + ")\\W+)" +
    motErreur.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") + "(?:\\W+(" +
    motAfter.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") + ")|\\W*$)", "g");
document.getElementById('edth_corps').innerHTML =
    document.getElementById('edth_corps').innerText
        .replace(re, motBefore + " " + '<span id="' + nbId +
        '" class="erreurOrthographe" ' +
        'oncontextmenu="rightClickMustWork(event, this);return false"> '
        + motErreur + '</span>' + " " + motAfter);

但是事实是,因为我被放在这三个词的组中,所以我必须在他之前和之后给他这个词。

我用这项技术遇到的问题是我放宽了所有标点符号,更重要的是,如果有字体标签(或粗体,斜体,下划线),我将其放宽。

我想用一个跨度环绕这个词,就像它是当前节点的子代,其中这个词没有碰到上一个和下一个词(它们应该在这里,所以我们有正确的词,而不会再出现此词了)字)。

但是我不知道该怎么做,因为我只能使用旧的Javascript(IE编译器已设置为IE5的兼容模式,并且此功能是我无法对此版本进行重写的唯一功能)。 我不能使用像Jquery这样的库(使用此插件,我已经看到了很多解决方案)。

有人可以指出我正确的方向吗? 即使Error Word周围没有父母,而只是句子的一部分,insertBefore能否工作?

这不是一个完整的答案,但希望它将很有用。 您可以在IE中使用TextRange对象来修改元素中的文本。 这类似于W3C Range对象 ,但是IE的旧版本支持它。 使用此对象,您可以选择文本,查找文本并修改文本。

查找所需的文本将是棘手的部分,但是一旦找到并在一个范围内选择了它,就很容易修改HTML。

作为一个简单的示例,我创建了一个小提琴该小提琴在div中找到一个字符串并将其用跨距包围:

var findString = "JavaScript";
var content = document.getElementById("content");
var textRange = document.body.createTextRange();
textRange.moveToElementText(content);
if (textRange.findText(findString)) {
  var html = "<span class='selected'>" + findString + "</span>";
  textRange.pasteHTML(html);
}

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM