最近在做一个学校的XXX系统项目,因项目有个需求就是要像在word里面的添加批注功能一样,就是选中一段文字,然后为这些页面添加一些额外的信息;刚开始我们的方案是记录选中内容的下标,然后保存到数据库中,当要显示的时候就再数据库中读取下面然后在客户端用js合并,做着做着发现这种方法很烦,最后我们决定采用另一种方案,就是在在选中的文字两端加上自定义标记,批注的内容就是保存到自定义标签的属性里面去。

想法是有了,开始着手做Demo了,一开始我们就像在CKEditor里面做一个插件,看了一天的CKEditor的API和源码,搞到一头雾水,写CKEditor插件太复杂了,有要什么初始化、又要什么execute、一堆东西,最后放弃了这方案,最后决定还是自己写一个添加批注的工具出来,写到一半的时候竟发现一个国内强大的HTML编辑器KindEditor,只需几行代码就解决了(为什么不早点发现(T-T));既然工具已经写了一半了,还是把它写完了,最终Demo出来了。

在这里就跟大家分享一下,大家看一下还有没有好的做法。

/**

* @作者:WilliamSha

* @时间:2011-10-18 下午07:52:01

* @项目名:XXX

* @描述:操作批注工具

*/

//初始化页面元素

$(function(){

$(".content").mouseup(function(e){

var selectedText ;

if(window.getSelection) {

selectedText = window.getSelection().toString();

}

else if(document.selection && document.selection.createRange) {

selectedText = document.selection.createRange().text;

}

if(selectedText){

$("#icon").css({

"left" : e.clientX+1,

"top" : e.clientY-30

}).fadeIn(300);

}

else {

$("#icon").hide();

}

});

$("#icon").hover(function(){

$(this).children().removeClass("tipsIcon");

}

,

function(){

$(this).children().addClass("tipsIcon");

}).click(function() {

$("#icon").hide();

addPostil();

});

});

//添加批注

function addPostil() {

//IE支持的range对象

var ie_range ;

//其他浏览器的range对象

var other_range ;

if(window.getSelection) {

other_range = window.getSelection().getRangeAt(0);

}

else if(document.selection && document.selection.createRange) {

ie_range = document.selection.createRange();

}

art.dialog({

id:'inputDialog',

title:'添加批注',

content:'',

lock:true

}

, function(){

var value = document.getElementById("postil").value;

if(!value){

art.dialog({

content:'批注内容不能为空!', time: 1

});

return false;

}

if(other_range) {

/*

//IE之外的浏览器,如果在选择内容包含其他标签的一部分的时候会报异常

var mark = document.createElement("ins");

mark.setAttribute("comment", value);

mark.className = "postil";

mark.id=new Date().getTime();

other_range.surroundContents(mark);

*/

var selected = other_range.extractContents().textContent;

var text = "[ins id='"+(new Date().getTime())+"' comment='"+value+"']"+selected+"[/ins]";

var textNode = document.createTextNode(text);

other_range.insertNode(textNode);

var content = $(".content").html();

var reg = /\[ins id='(\d*)' comment='([\w\W]*)']([\w\W]*)\[\/ins]/gi;

reg.test(content);

var id = RegExp.$1,

comment = RegExp.$2,

c = RegExp.$3;

var reHtml = ""+c+"";

content = content.replace(reg, reHtml);

$(".content").html(content);

}

else if(ie_range) {

ie_range.pasteHTML(""+ie_range.htmlText+"");

ie_range=null;

}

loader();

});

}

//解析批注

function loader(){

var $list = $(".list");

$list.children().remove();

$.each($(".content ins"), function(a, b){

var content = $(b).attr("comment");

var $postil = $("

"+content+"x

");

$postil.hover(function(){

$(this).css("border-color", "red");

$("#"+$(this).attr("forid")+"").removeClass().addClass("postilFocus");

}

,

function(){

$(this).css("border-color", "#ddd");

$("#"+$(this).attr("forid")+"").removeClass().addClass("postil");

});

$(b).hover(function(){

$(this).removeClass().addClass("postilFocus");

$("div[forid='"+$(this).get(0).id+"']").css("border-color", "red");

}

,

function(){

$(this).removeClass().addClass("postil");

$("div[forid='"+$(this).get(0).id+"']").css("border-color", "#ddd");

});

$list.append($postil);

});

}

//删除批注

function removePostil(arg){

var $div = $(arg).parent();

var id = $div.attr("forid");

var $source = $("#"+id);

var text = $source.after($source.html());

$source.remove();

loader();

}

截图如下:

html 鼠标悬停批注,HTML 页面添加批注相关推荐

  1. js对文字批注_HTML 页面添加批注 - JavaScript - ITeye

    /** * @作者:WilliamSha * @时间:2011-10-18 下午07:52:01 * @项目名:XXX * @描述:操作批注工具 */ //初始化页面元素 $(function(){ ...

  2. ppt怎么加注解文字_向PPT2013演示文稿中添加批注将反馈和想法添加到演示文稿...

    向PPT2013演示文稿中添加批注将反馈和想法添加到演示文稿 时间:2014-01-07   作者:snow   来源:互联网 使用批注来将反馈和想法添加到演示文稿.将批注附加到幻灯片中的某个字母或单 ...

  3. Activiti添加批注(comment)信息

    在每次提交任务的时候需要描述一些批注信息,例如:请假流程提交的时候要描述信息为什么请假,如果领导驳回可以批注驳回原因等 1.添加批注 // 由于流程用户上下文对象是线程独立的,所以要在需要的位置设置, ...

  4. VBA实现为Excel中自定义名称的单元格添加批注

    一.本地office中通过创建宏实现此需求 1.打开一个Excel文件,在需要插入批注的单元格右击-定义名称(myTable1).点击菜单栏-视图-宏-查看宏-输入宏名-创建宏 ​ 2.进入VBA编辑 ...

  5. Word如何添加批注

    我们有时需要对word文本添加批注,那么如何添加呢?下面就以我常用的软件来介绍下吧. 1,打开word,选中要添加批注的文本. 2,然后点击工具栏--"协作"--"添加评 ...

  6. speedoffice(Word)如何添加批注

    我们有时需要对word文本添加批注,那么如何添加呢?下面就以我常用的软件来介绍下吧. 1.打开word文档,选中要添加批注的内容,点击"协作"--"添加评论". ...

  7. Axure 交互学习1 基础页面跳转、鼠标悬停样式

    这是一个非常简单基础的页面跳转 1.首先创建两个页面 page1和page2 page1放一个按钮    page2放一个按钮 2.为page1的按钮添加交互动作 1⃣️选中按钮 2⃣️在交互中选择  ...

  8. 利用伪元素给图片在鼠标悬停时添加背景图片

    利用伪元素给图片在鼠标悬停的时候添加背景图片,这种效果在电影网站上使用的比较频繁,主要是鼠标悬停的时候显示出播放的图标,点击图片链接后就会进入视频详情页面,而使用伪元素是为了使我们的html代码更加简 ...

  9. Speedoffice(ppt)如何添加批注

    我们有时需要对PPT文本添加批注,那么如何添加呢?下面就以我常用的软件来介绍下吧. 1,打开PPT,选中要添加批注的文本. 2,然后点击工具栏--"插入"--"批注&qu ...

最新文章

  1. 9个常用iptables配置实例
  2. S/4HANA生产订单增强WORKORDER_UPDATE方法
  3. [转] 鼠标移入/移出颜色渐变
  4. 遗传算法(Genetic Algorithm )+C++实现解决TSP问题
  5. “面试不败计划”: java语言基础面试题(三)
  6. python爬虫登陆网页版腾讯课堂
  7. idea重写接口没有@override_接口和抽象有什么区别?
  8. 2021年中国仪表阀市场趋势报告、技术动态创新及2027年市场预测
  9. 准确率(Precision)、召回率(Recall)、F值(F-Measure)、ROC、AUC
  10. 逐步完善自己的3D引擎
  11. ajajx请求php能设置cookie,为什么在AJAX请求返回后浏览器没有设置cookie?
  12. python实现时序异常检测_时序预测 01 - 异常检测 Smoothed z-score algorithm 标准化的一些实践、调参总结 -Python/pandas/numpy...
  13. matlab 关键路径函数,用线性规划建模(确定参数)关键路径法
  14. 不仅仅是土豆_设计成功不仅仅需要设计技能
  15. SPU和SKU有什么区别
  16. Centos使用chrony做时间同步
  17. excel表格生成图片的方式
  18. php活体检测,双目活体检测摄像头,人脸识别SDK,红外活体算法
  19. win10 android软件下载,windows10模拟器安卓版
  20. Java opencv4 如何识别一张图片的你想要的物体的数量

热门文章

  1. JS 实战: Drag 点击拖曳效果
  2. 友价商城源代码插件汇总
  3. Micropython实现表情识别控制小车运行
  4. PC机插入麦克风后没有说话没有声音
  5. 互斥量、临界区、信号量、事件标志组和消息邮箱(转)
  6. catia v5r18 百度云_catia v5r18 64位免费版 附带安装教程
  7. 如何把catia完全卸载干净_catia卸载不了怎么解决-解决catia无法卸载的方法 - 河东软件园...
  8. YFCMF,设置跳转后台首页
  9. 计算机word表格求和怎么操作,Word表格编辑技巧:利用“公式”命令求和-word技巧-电脑技巧收藏家...
  10. 并发编程笔记——第六章 Java并发包中锁原理剖析