如何在Javascript中搜索字符串中更改的特定文本

时间:2016-07-20 13:20:18

标签: javascript html

我遇到了一个我几乎无法轻易描述的问题。 我从包含多个对象的RESTful API中获取JSON数据,然后将这些对象作为文本放在 Textarea 字段中,以便对其进行编辑。编辑完成后,单击一个按钮,然后将该字符串保存在数据库中的其他位置。 到目前为止一切都很好。

问题出现在用户在Textarea字段中编辑该文本然后再次触发API(从同一网站上的表单中回答另一个问题)的情况下,以便将另一个数据提取到该Textarea中,但编辑的数据也应该存在。

E.g。第一次在Textarea中插入了2个句子:

  

汽车漆成了红色。这辆车有四个轮子。

然后用户更改了表单中的第一个答案,因此Textarea看起来像这样:

  

汽车漆成蓝色。这辆车有四个轮子。

我用Javascript replace()函数搞清楚了,只找到句子“汽车漆成红色”。并将其替换为“汽车漆成蓝色。”

   document.getElementById("myTextarea").value = journalTextareaString.replace(tempPreviousAnswer,tempChangedAnswer);

如果在句子之前/之后编辑文本,则通常用新的句子替换句子,来自用户的所有添加的文本都保留。例如,用户手动输入了一些额外的文本:

  

我爱我的车。汽车漆成了红色。车很好。这车有4个   车轮。

现在如果他将汽车在表格上切换为蓝色,则手动编辑的文本会保留,只有颜色的句子会被更改:

  

我爱我的车。这辆车漆成了蓝色。车很好。这车有4个   车轮。

但是,当用户从句子内部编辑文本时,我该怎么做呢,例如他在句子之间放了一个单词“chrome”,如:

  

汽车漆成铬红色。这辆车有四个轮子。

感谢。

2 个答案:

答案 0 :(得分:1)

这里最难的是你将文本附加在一起。将它们放在不同的盒子里。这使得Impossible可以区分不同的领域。将它们分开。这使您可以回滚并告知编辑内容的不同。

答案 1 :(得分:-1)

您要做的是合并远程方和本地方的文本。这是一项复杂的事情,并没有一个简单的解决方案。请让我解释原因..

示例方案

让我们以例如用户(B)" Bob"和用户(A)" Allan"。他们将合作处理文档(或者在您的情况下只是一个字符串)。有一个版本1,他们都开始工作,同时你将有A和B进行更改,所以你从用户A得到版本2.让我们称之为A2,而版本B来自用户2,版本B2。

冲突问题

首先,您应确保这两个用户都来自版本1.因此,您应该跟踪版本。然后,必须解决一个更复杂的问题:合并冲突。以此图片为例:

conflict of versions

您将不得不决定如何解决此冲突。 A总是会否决B吗?哪一个人推翻一个?或者你是否只是将用户A和B的编辑随机地放在文本中的相同位置?你将如何处理字间距,删除,添加,更新?

看看这会让你怎么想?

<强>解决方案吗

当您遇到麻烦时,您应该为您的用户提供一种方法来解决他们的冲突(保持我的冲突,保持他们的冲突或交互式地显示冲突)

使用资源锁定

另一个解决方案是完全避免协作:锁定您的数据(暂时只为1人以外的所有人使用),以便永远不会有2人同时编辑您的数据。

另见

使用&#34;版本控制系统&#34;的人非常了解这个问题。例如GIT,SCM和SVN。下面是一个合并应用程序如何帮助程序员解决合并冲突:

merge conflict resolving application screenshot