允许用户发布内联评论

Allowing users to post inline-comments

本文关键字:布内联 评论 用户 许用户      更新时间:2023-09-26

允许用户在网页文本块内发布内联评论的有效方法是什么?

例如,如果有这样一篇文章:

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>