我有一个应用程序,允许用户评论文本文档(如谷歌文档)。当我允许用户从页面中删除这些评论时,我遇到了一些奇怪的行为。根据请求删除,我会运行一些代码并从注释中提取原始内容,然后从页面中删除注释。
删除代码如下所示
html = html + $(this).html()
$(this).children().andSelf().unbind();
$(this).contents().unwrap()
$(this).remove()
代码是从更大的代码中提取的,但我不相信代码的其余部分是必要的,以隔离这个问题。事实上,我甚至不确定这段代码是否有必要修复它。
无论如何,当用户删除评论(使用上面的代码)然后尝试在同一个地方留下另一个评论时,会出现问题。无论他们试图发表什么评论,如果它甚至包含旧评论的部分内容,浏览器将自动从旧评论中选择所有内容。
奇怪的是,我已经彻底扫描了html,并且没有旧评论的基于HTML的残余。浏览器中的所有内容(当我检查元素时)是用于开始和结束的注释的引号。这是一个提取的摘录,其中有注释(它是带有hl类的span)
<span class="T1">Lorem ipsum hendrerit in
<span class="hl s_240" highlight_id="s_240">
<span class="remove_highlight" style="display: none;">Remove</span>
"vulputate"
</span> velit esse
</span>
这是删除评论后提取的代码
<span class="T1">Lorem ipsum "vulputate" velit esse </span>
注意前面突出显示的单词周围的引号 这是当我发表新评论时,只选择veluptuate中的e和后面单词中的v
<span class="T1">"Lorem ipsum hendrerit in "
<span class="hl new_hl s_421" highlight_id="s_421">
<span class="remove_highlight">Remove</span>
"vulputate v"
</span>
"elit esse"
</span>
正如您所看到的,浏览器会自动假设我想突出显示整个单词vulputate,即使我只选择了部分内容。
如果有人能告诉我为什么会这样或者如何解决它,我会非常感激!