页面加载Javascript时数据库中保存索引中的单词不匹配
我想突出显示页面加载中已为选定文本(单词或子字符串)保存开始和结束索引的单词。但问题在于页面加载,我从DB获取索引,但这些索引并没有指向所选的确切单词 下面是我正在使用的代码。我没能找出问题出在哪里。请帮忙 首先,这段代码运行页面加载Javascript时数据库中保存索引中的单词不匹配,javascript,html,Javascript,Html,我想突出显示页面加载中已为选定文本(单词或子字符串)保存开始和结束索引的单词。但问题在于页面加载,我从DB获取索引,但这些索引并没有指向所选的确切单词 下面是我正在使用的代码。我没能找出问题出在哪里。请帮忙 首先,这段代码运行 $(document).ready(function(){ var x; var url = window.location.pathname; var urlid = url.substring(url.lastIndexOf('/') + 1);
$(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.长度;
}
});
返回范围;
}
问题从第二次迭代开始,第一次为索引找到正确的单词,然后第二次选择错误的单词。不知道为什么
请帮忙