允许用户发布内联评论
Allowing users to post inline-comments
允许用户在网页文本块内发布内联评论的有效方法是什么?
例如,如果有这样一篇文章:
congue eget ipsum。分娩时与分娩前相比,分娩前与分娩前相比,分娩后与分娩前相比
我希望网页的访问者能够对一些文本进行评论,他们可以选择几个单词并开始键入内联评论。为单词建立索引,让每个单词都有一个数字是行不通的,因为文本可以编辑,这样单词的数字就不准确了。
更改存储的文本并为每个注释添加一些标记有什么问题吗?如:
congue eget ipsum。产月龄
<user:123;comment:123>penatibus et magnis</user:123;comment:123>
;
这样我就可以解析文本,然后从数据库中提取注释,并以内联或气球或其他方式显示它们。
有更好的解决方案吗?
首先,更改底层标记不会很好地工作,因为如果内联注释重叠会发生什么?
如果以这样的方式编辑文本,更改的单词包含内联注释,会发生什么情况?
如果没有更具体的规范,就没有"完美"的方法来做到这一点。我建议按照您的建议将评论存储为单词索引。如果文本被修改,请在旧版本和新版本之间运行差异。使用这个diff,您可以尝试更新内联注释的索引,并删除放置在修改文本块上的注释。我会使用javascript检索选定的文本,然后计算它的位置从开始到选定文本的字符计数。因此,在数据库中,我将存储评论,"开始"位置和选择的"长度"。这种解决方案的问题是,您不能更改原始文本,因为如果您这样做,那么您必须更新所有注释的位置(其中一些可能需要删除)
这是容易的部分。困难的部分是显示@tskuzzy列出的所有问题的注释(重叠的注释)
我做了一个小实验:
http://jsfiddle.net/5jNg9/1/<div id="content">
congue eget ipsum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
</div>
<input type="button" onclick="checkSelection()" value="Get Selection"/>
<script>
function checkSelection(){
var text = document.getElementById('content').innerHTML;
var selection = document.getSelection();
if(selection == ""){
alert("cmon' at least select something first!");
} else{
var start = text.search(selection);
alert("selection starts at character: "+ start +
"'n and ends at character: "+(selection.length + start - 1) + "'n" +
"the selected text is: '"+selection+"'");
}
}
</script>
相关文章:
- 如何编写HTML输入的JS内联
- 跟踪在页面加载时应用内联样式的JavaScript
- 剑道UI内联编辑:如何在点击其他按钮时隐藏按钮
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- 使用具有内联样式的tidy-html5
- Bootstrap 3 Datepicker v4:dp.show和dp.change事件在Datepicker内联时不
- WinJS内联绑定语法
- 动画显示:无显示:内联
- 动态行的内联计算
- Dojo IE DataGrid内联编辑
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 复选框与文本内联-JS问题
- 在编辑内联模式下禁用Kendo Ui网格按钮
- 内联javascript与"<脚本>"字符串错误地关闭了脚本标记
- 建议将包含不同参数的内联JS转换为外部脚本
- jQuery dosn'内联函数不能按预期工作
- 将形状/掩码动态添加到内联svg中
- 当内联链接“#"被点击或输入到url中,就像链接到reddit评论时一样
- 允许用户发布内联评论
- 切换HTML链接文本'显示/隐藏'显示/隐藏用于注释的内联表单;创建唯一的标识符,这样页面上的所有评论链