具有相同文本的多个值未获得确切的所选文本偏移量

时间:2018-07-18 10:50:05

标签: javascript html css angularjs

我有一个类似->

的文字
  

Lorem Ipsum只是印刷和排版行业的虚拟文本。自1500年代以来,Lorem Ipsum一直是行业的标准伪文本,当时一位不知名的打印机拿起一个厨房,将其打乱成一本样本书。它不仅生存了五个世纪,而且在电子排版方面也取得了飞跃,但基本上没有改变。它在1960年代开始流行,发布了包含Lorem Ipsum段落的Letraset工作表,最近还发布了Aldus PageMaker等桌面发布软件,包括Lorem Ipsum的版本。

现在,我要突出显示文本的某些部分,因此我需要知道字符串的开始和结束偏移量。

it to make a 

这是我要突出显示的文本,因此我需要此文本的偏移量;到目前为止,我尝试使用以下逻辑

var startoffset  = $scope.original_doc_content.indexOf("it to make a ");
var endoffset =  startoffset + string.length;

现在,如果it to make a在给定文本中出现2次,我的问题就出现了:如果我想突出显示或想取第二个,如果它出现在第二个之前,则给我第一个偏移量,而不是我需要的第二个。那么我该如何解决呢?

1 个答案:

答案 0 :(得分:0)

您可以通过简单的替换轻松地突出显示

window.onload = function(){
  var str = document.getElementById("mypar").innerText;
  var res = str.replace(/text/g, "<span class=\"highlight\">text</span>");
  document.getElementById("mypar").innerHTML = res;
};
.highlight {
  background-color: yellow;
}
<p id="mypar">This is my text where i want to highlight text or something</p>

或者您可以执行此操作以获取索引。这可能不是最好的解决方案,但它可以工作。反复遍历单词,直到找不到更多单词,并将值记录到控制台。

window.onload = function(){
  var str = document.getElementById("mypar").innerText;
  var indexFirstChar = 0;
  var indexOfLastChar = 0;
  var searchString = "text";
  while(str.indexOf(searchString, indexFirstChar + 1) >= 0) {
     indexFirstChar = str.indexOf(searchString, indexFirstChar + 1);
     indexOfLastChar = indexFirstChar + searchString.length - 1;
     console.log(indexFirstChar);
     console.log(indexOfLastChar);
  }
};
<p id="mypar">This is my text where i want to highlight text or something</p>