solomon523 2015-02-06 03:44 采纳率: 0%
浏览 30785

使用 window.getSelection() 方法获取鼠标划取部分的起始位置和结束位置的问题

项目需要对html内文章内容做颜色标记的功能,但是不能改写原html的内容。

现在想到的方案是鼠标划取文章内容的时候,使用js获取文章内容的起始位置和结束位置,存入数据库,下次再访问该文章的时候,使用数据库记录的起始位置和结束位置去刻画标记。

测试前端代码如下

 <!DOCTYPE html> 
<html> 
<head> 
<script type="text/javascript" src="js/jquery-1.7.2.js"></script> 
</head> 
<body> 
<div id="content" style="background: grey"> 
乔布斯掌权时代的iPhone以精湛的做工受到广泛的关注,也受到了大量的果粉追捧。iPhone4S的黄金尺寸设计,再到iPhone5s的巅峰状态,但是iPhone6的横空出世似乎打破了苹果公司在工艺方面的追求。虽然iPhone6及其iPhone6 Plus的销量比前几代产品都要高 (原因受安卓大屏冲击的影响,果粉对大屏手机的欲望愈加的浓烈),但是收到广泛吐槽也是最多的。大白条,尤其是突出的摄像头,乔布斯知道估计都能从坟里跳出来! 不喜欢的iPhone6的果粉可以等等了,iPhone7马上就要来临了,这是国外设计师设计出的一部iPhone7的概念图,这部iPhone7不仅做工精湛, 而且消除了打白条和涉嫌头突出问题,更重要的是采用了iPhone4的双面玻璃设计,边角做出了圆润设计,不仅时尚,而且商务气息十足, 适合追求时尚的年轻人和商务人士使用,受用人群更广泛了。 
</div> 
</body> 
<script type="text/javascript"> 
$(function(){ 
$("#content").mouseup(function(e){ 
if(window.getSelection) { 
var textObj = document.getElementById("content"); 
var selectedText = window.getSelection().toString(); 
alert(selectedText); 
selectedText = "<span style='background:red'>"+selectedText+"</span>"; 

var start = window.getSelection().anchorOffset; 
var end = window.getSelection().focusOffset; 

var tempStr1 = textObj.innerHTML.substring(0,start); 
var tempStr2 = textObj.innerHTML.substring(end); 

document.getElementById("content").innerHTML = tempStr1 + selectedText + tempStr2 ; 

} 


}); 

}); 

</script> 
</html>

第一次划取执行的时候没有问题,获取的起始位置是相对于div标签的。

执行之后会向html中添加span标签

第二次划取span标签后的文字的时候,获取的起始位置却是相对于span标签的

有没有方法每次获取的起始位置都是相对于div的?

  • 写回答

8条回答 默认 最新

  • silent_winter 2019-02-02 11:54
    关注

    已解决
    <!DOCTYPE html>



    乔布斯掌权时代的iPhone以精湛的做工受到广泛的关注,也受到了大量的果粉追捧。iPhone4S的黄金尺寸设计,再到iPhone5s的巅峰状态,但是iPhone6的横空出世似乎打破了苹果公司在工艺方面的追求。虽然iPhone6及其iPhone6 Plus的销量比前几代产品都要高 (原因受安卓大屏冲击的影响,果粉对大屏手机的欲望愈加的浓烈),但是收到广泛吐槽也是最多的。大白条,尤其是突出的摄像头,乔布斯知道估计都能从坟里跳出来! 不喜欢的iPhone6的果粉可以等等了,iPhone7马上就要来临了,这是国外设计师设计出的一部iPhone7的概念图,这部iPhone7不仅做工精湛, 而且消除了打白条和涉嫌头突出问题,更重要的是采用了iPhone4的双面玻璃设计,边角做出了圆润设计,不仅时尚,而且商务气息十足, 适合追求时尚的年轻人和商务人士使用,受用人群更广泛了。

    var textObj = document.getElementById("content"); textObj.addEventListener('mouseup',function(e){ if(window.getSelection) { var selectedText = window.getSelection().toString(); var text = window.getSelection().anchorNode; selectedText = "<span style='background:red'>"+selectedText+"</span>"; var start = window.getSelection().anchorOffset; var end = window.getSelection().focusOffset; var selection = window.getSelection(); console.log(selection,selectedText); var tempStr1 = text.nodeValue.substring(0,start); var tempStr2 = text.nodeValue.substring(end); var newText = document.createElement('span'); newText.innerHTML = tempStr1 + selectedText + tempStr2; text.parentNode.replaceChild(newText,text); } });

    评论

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题