页面加载Javascript时数据库中保存索引中的单词不匹配

页面加载Javascript时数据库中保存索引中的单词不匹配,javascript,html,Javascript,Html,我想突出显示页面加载中已为选定文本(单词或子字符串)保存开始和结束索引的单词。但问题在于页面加载,我从DB获取索引,但这些索引并没有指向所选的确切单词 下面是我正在使用的代码。我没能找出问题出在哪里。请帮忙 首先,这段代码运行 $(document).ready(function(){ var x; var url = window.location.pathname; var urlid = url.substring(url.lastIndexOf('/') + 1);

我想突出显示页面加载中已为选定文本(单词或子字符串)保存开始和结束索引的单词。但问题在于页面加载,我从DB获取索引,但这些索引并没有指向所选的确切单词

下面是我正在使用的代码。我没能找出问题出在哪里。请帮忙

首先,这段代码运行

$(document).ready(function(){
  var x;
  var url = window.location.pathname;
  var urlid = url.substring(url.lastIndexOf('/') + 1);
    
  $.ajax({
  type:'GET',
  url:'/check-words',
  data:{urlid:urlid},
  success:function(data){
   for (let [index,x]  of data.entries()) 
   {
    var jsondata = x + '';
    var nameArr = jsondata.split(',');
    console.log('when x is', x);
    console.log('nameArr is', nameArr);

    var a = nameArr[0];
    var b = nameArr[1];
    highlight($('.main-detail-content'), a, b);
    var ra = s.getRangeAt(0);  
    alert(ra);
    s.removeAllRanges();
    var newNode = document.createElement("em");
    newNode.appendChild(ra.extractContents());
    ra.insertNode(newNode);
   }
  }
 })
});
然后调用highlight函数

function highlight(element,st,en){
    range = document.createRange();
    // start = st;
    // end = en;
    console.log(range);
    var newrange = dig(element,st,en,range);
    s.addRange(range);
    console.log(newrange);   
}
function dig(el,start,end,range){
    let pos = 0;
    $(el).contents().each(function(i,e)
    {
        if (e.nodeType==1)
        {
            // not a textnode
         dig(e);   
        }
        else
        {
            if (pos<start)
            {
               if (pos+e.length >=start)
               {
                range.setStart(e, start-pos);
               }
            }
            
            if (pos<end)
            {
               if (pos+e.length>=end)
               {
                range.setEnd(e, end-pos);
               }
            }            
            
            pos = pos+e.length;
        }
    });
    return range;  
}
然后突出显示调用dig函数

function highlight(element,st,en){
    range = document.createRange();
    // start = st;
    // end = en;
    console.log(range);
    var newrange = dig(element,st,en,range);
    s.addRange(range);
    console.log(newrange);   
}
function dig(el,start,end,range){
    let pos = 0;
    $(el).contents().each(function(i,e)
    {
        if (e.nodeType==1)
        {
            // not a textnode
         dig(e);   
        }
        else
        {
            if (pos<start)
            {
               if (pos+e.length >=start)
               {
                range.setStart(e, start-pos);
               }
            }
            
            if (pos<end)
            {
               if (pos+e.length>=end)
               {
                range.setEnd(e, end-pos);
               }
            }            
            
            pos = pos+e.length;
        }
    });
    return range;  
}
功能挖掘(el、开始、结束、范围){
设pos=0;
$(el).contents().each(函数(i,e)
{
if(e.nodeType==1)
{
//不是文本节点
挖掘(e);
}
其他的
{
如果(位置=开始)
{
范围设置开始(e,开始位置);
}
}
如果(位置=结束)
{
范围设置结束(e,结束位置);
}
}            
pos=pos+e.长度;
}
});
返回范围;
}
问题从第二次迭代开始,第一次为索引找到正确的单词,然后第二次选择错误的单词。不知道为什么

请帮忙