[英]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.