有一段文字,我希望鼠标滑动选中的文字可以变成红色(可选择多次,每次的文字都变红),
目前遇到的问题是,如果文字中有重复的内容,无法判断第几个文字应该变红,
尝试了两种方案,但是都失败了,请大神指点!
先上代码:
<!doctype html>
<html lang="zh">
<head>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
<body>
<div id="test">
天气很晴朗, 今天真的很开心,今天真不错
</div>
</body>
<script>
$('#test').mouseup(function(){
var selectObj = window.getSelection();
var start = selectObj.anchorOffset;
var end = selectObj.focusOffset;
var changeText = selectObj.toString();
var oldHtml= $('#test').html();
// 方法一
// var newHtml = oldHtml.replace(changeText, '<span style="color:red">'+changeText+'</span>');
// $('#test').html(newHtml);
// 方法二
var startIndex = start < end ? start : end;
var endIndex = end > start ? end : start;
var newHtml = oldHtml.substring(0, startIndex) + '<span style="color:red">' + changeText + '</span>' + oldHtml.substring(endIndex);
$('#test').html(newHtml);
})
</script>
</html>
方法1缺陷:我鼠标划选的是第二个“今天”但是高亮的却是第一个"今天"
方法2缺陷:多次选择的时候,文字会错乱
为了避免重复选中时无限嵌套的span,下面这种通过替换的实现,只有一层span标签