最近在做一个学校的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:'<textarea id="postil" rows="10" cols="30"></textarea>',
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 = "<ins id='"+id+"' comment='"+comment+"' class='postil' >"+c+"</ins>";
content = content.replace(reg, reHtml);
$(".content").html(content);
}
else if(ie_range) {
ie_range.pasteHTML("<ins comment='"+value+"' class='postil' id='"+new Date().getTime()+"'>"+ie_range.htmlText+"</ins>");
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 = $("<div forid='"+$(b).get(0).id+"'>"+content+"<span onClick='removePostil(this)'> x</span></div>");
$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();
}
截图如下:
- 大小: 10.7 KB
分享到:
相关推荐
"前端页面添加文字批注.rar"这个压缩包文件提供了一个实例,演示了如何在网页中实现实时添加、编辑和删除批注的机制,特别强调了选中文本后添加背景色的功能。以下是对这一知识点的详细说明: 1. **jQuery库的使用*...
如`fillRect()`、`strokeRect()`用于画矩形,`beginPath()`、`moveTo()`、`lineTo()`等用于画曲线和线条,`fillText()`用于添加文本,以及`save()`、`restore()`用于保存和恢复绘图状态,便于进行复杂的批注操作。...
2. **选择器**:在jQuery中,我们可以使用选择器来获取用户想要添加批注的元素,如`$("#elementId")`选取ID为`elementId`的元素。 3. **事件处理**:当用户点击批注按钮时,需要监听`click`事件,然后激活批注...
它将HTML页面、图像和其他资源组合成一个单一的压缩文件,方便用户快速访问和阅读。CHM格式的文档通常包含索引、目录和搜索功能,为用户提供便捷的查阅体验。 批注工具是用于在文档上添加个人注解、高亮或标记的...
首先,我们需要一个用户界面,让用户能够选择添加批注的位置。这可以通过在页面上添加浮动按钮或者选中文字后出现的工具栏来实现。Jquery的`$(document).ready()`函数可以确保所有元素加载完毕后再执行初始化代码。...
在移动设备上实现PDF预览并添加批注功能,通常会用到HTML5中的Canvas技术。Canvas是一个基于矢量图形的API,允许开发者在网页上动态绘制图形,并且可以与JavaScript进行交互。在这个场景中,我们需要结合PDF.js库来...
1. **WebView基本使用**:首先,你需要了解如何在布局XML文件中添加WebView组件,并在Java代码中找到对应的视图对象。通过`setWebViewClient()`和`setWebChromeClient()`设置客户端,以便处理页面加载和交互事件。 ...
wkhtmltopdf是一个开源命令行工具,它基于WebKit渲染引擎(用于Webkit浏览器如Chrome和Safari)将HTML页面转化为高质量的PDF文档。该工具支持CSS3,JavaScript,以及图片和表格的复杂布局。 3. **整合Jtidy和...
本文将详细讲解如何利用jQuery为图片添加标注功能,以便用户可以通过图标来展示图片的相关信息。 首先,我们需要理解jQuery的核心概念。jQuery通过提供简洁的API,使得JavaScript代码更易于编写和维护。其基本用法...
这个库允许开发者在浏览器环境中捕获DOM元素的视觉表示,这对于创建屏幕截图或者在离线环境下保存页面内容非常有用。`html2canvas`的工作原理是解析DOM结构,然后模拟CSS样式,将每个元素绘制到Canvas上。通过这种...
在实际应用中,开发者需要根据自己的需求对插件进行配置和定制,例如设置默认缩放级别、调整页面加载策略、添加自定义的工具栏按钮等。同时,为了保护用户隐私和网站安全,应当注意处理好PDF文件的加载和缓存,避免...
3. **页面管理**:支持添加、删除、移动或合并PDF页面,方便组织和整理文档。 4. **注释与批注**:提供高亮、下划线、删除线、文本框、便签、箭头、图形等工具,便于审阅和反馈意见。 5. **表单填写**:编辑交互式...
Prebuilt (older browsers) PDF.js是一个JavaScript库,可以在现代Web浏览器中...支持批注和标记:PDF.js可以让用户在PDF文件中进行批注和标记,例如划线、画框、添加注释等,以便在阅读或共享时进行交流和标记重点。
HTML(HyperText Markup Language)是用于创建网页的标准标记语言,它是网页设计的基础,允许开发者通过一系列标签来构建页面结构和内容。"HTML语法大全.dos" 提供了关于HTML的各种语法示例,以下将详细解释其中涉及...
---->`:这是一个批注标签,用于在HTML代码中添加注释,不会在浏览器中显示。 - `<marquee>`:跑马灯效果,使文本或图像在页面上自动滚动。`behavior`属性可设定滚动方式,如`slide`(滑动)、`scroll`(预设滚动)...
- `音乐文件地址">` 用于在页面中添加背景音乐。 7. **表格语法**: - `|center">` 控制表格的对齐方式。 - `图片路径">` 设置表格背景图片。 - `边框大小">`、`bgcolor`、`bordercolor`、`bordercolordark` 和...
5. **添加注释**:选择“注释工具”,可以使用各种工具在页面上添加批注,如使用文本框、箭头或形状。 6. **页面管理**:在“页面”菜单下,你可以进行添加、删除、旋转或提取页面的操作。 7. **设置权限**:在...
11. **批注和注释**:Aspose.Pdf允许添加批注和注释到PDF文档,包括高亮、下划线、删除线、文本框、便签等。 总的来说,Aspose.Pdf是Java开发者处理PDF文档的强大工具,它提供了全面的API,几乎涵盖了所有常见的PDF...
1. **批注**:`<! -- ... -->` 用于在HTML代码中添加注释,这对开发者来说非常有用,可以在不影响网页显示的情况下提供代码解释。 2. **跑马灯效果**:`<marquee>` 标签可以创建滚动文本或图像,例如: - `...