【发布时间】:2018-08-31 09:52:47
【问题描述】:
我是webDevelopment 的新手。我有包含一些文本的字符串。现在我想突出显示该文本文件中的一些单词。所以,我在这里使用这个逻辑
$scope.highlightHTML = function (content,startoffset,endoffset,color) {
var className = 'mark';
console.log(content.substring(startoffset, endoffset));
return content.replace(content.substring(startoffset, endoffset), '<span class="' + className + '">$&</span>');
}
现在一切正常。但是现在发生的情况是,当第一个单词被突出显示时,然后当它试图突出显示第二个单词时,字符串偏移量由于这种替换而发生了变化。它也需要标签,所以现在偏移量正在改变。现在,当我突出显示一些文本时,下次它不应该使用 span 标签的开始和结束偏移量。那么,我该怎么做呢?
就像"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged"
我有这个字符串。现在,我想突出显示when an unknown printer took a galley of 现在,为此我使用子字符串,因为我从后端本身获取开始和结束。我只用标记标记替换那个字符串。
现在问题就在这之后,如果我想突出显示but also the leap into electronic typesetting,那么我从后端得到的偏移量将没有用,因为在替换第一个字符串时我添加了span标签,所以它占用了span标签偏移量也是如此。所以,它也没有通过提供偏移量来让我得到确切的字符串。它给了我另一个字符串,因为偏移量已经改变。现在,在突出显示偏移的同时,不应通过添加 span 标签来更改。
Ajax 调用 -
jsonDataArray.forEach(function (item) {
responseData = $scope.highlightHTML(responseData,item.startOffset,item.endOffset,item.color);
$rootScope.data.htmlDocument = responseData.replace(/\n/g, "</br>");;
});
【问题讨论】:
-
类似于this
-
其实不一样
-
您能发布您的输入、当前输出以及您的预期吗?
-
@ThanatManeenut请查看更新后的问题
-
一种选择是您存储原始文本并检查字符串在原始文本而不是更新文本上的位置。
标签: javascript jquery angularjs html