繁体   English   中英

查找和替换以及所见即所得的编辑器

[英]Find and Replace and a WYSIWYG Editor

我的问题如下:

我有一列:ProductName。 现在,在此处输入的文本是从tinyMCE输入的,因此具有各种标签。 用户希望能够对所有产品进行查找和替换,并且它必须支持着色。

例如-假设这是ProductName的一部分:

其他文本.. <strong>text text <font color="#ff6600">colortext&reg;</font></strong> ..其他文本

现在,用户想要替换:

<font color="#ff6600">colortext&reg;</font>

原始名称中带有<strong>标记,因此显示为粗体。 因此,用户将其设为粗体-现在他要搜索的文本为:

<strong><font color="#ff6600">colortext&reg;</font></strong>

显然我不会找到它。 另外还有空间的问题:在一个地方有一个空间,而在另一个地方没有。

有办法克服吗?

从搜索文本中剥离HTML标记,然后首先进行纯文本搜索。 然后,逐个部分(即逐个文本节点的文本节点),采用搜索文本各部分的元素路径,并将其与找到的文本中的对应部分进行比较。 如果所有零件的路径都匹配,就可以完成。

编辑 :按路径,我的意思是类似于XPath或TinyMCE编辑器的路径概念。 示例:搜索文本的纯文本部分是“ colortext&reg;”。 该文本节点在搜索文本中的路径为<strong>/<font color="#ff6600"> 在文本正文中搜索相同的纯文本(简单的),并采用其路径,该路径也是<strong>/<font color="#ff6600"> (将此与“其他文本..”的路径( / )和“文本文本”的路径( <strong> 。这两个路径相同,因此这是真正的匹配。 如果您具有DOM树表示形式,则确定路径应该不会很困难。

如果它是有效的XML,那么XSLT对于这种练习将是微不足道的。 使用身份模板,然后添加XPath以查找所需的特定节点:

<xsl:template match="//strong/font">
    <xsl:copy>
        <!-- Insert the replacement text here -->
    </xsl:copy>
</xsl:template>

使用XML时,这将是一个可维护的,可扩展的解决方案。

您需要几个相关但离散的功能:

  • 搜索和替换内容
  • 搜索和替换格式
  • 搜索和替换相似内容(即忽略空白中的细微差别)

您应该分步骤进行操作-否则它将变得不堪重负,并且如果不付出巨大的努力,单个搜索算法将无法完成所有这三个操作,从而导致难以维护代码。

首先,看看类似的问题。 搜索忽略空格和大小写。 如果您还需要处理“碗式”与“碗式”以及“智能式”与“智能式”,您可能希望使用Lucene或其他搜索引擎技术-尽管我希望这超出了您当前的需求。

工作完成后,它将成为搜索堆栈中的一层。

其次,查看格式搜索。 通常使用令牌或标记来完成此操作-您已经以HTML形式使用了它们。 但是,您必须能够按顺序处理问题-因此,在搜索<i><b>text</b></i> ,必须抓住<b><i>text</i></b> <i><b>text</b></i>以及标记未正确嵌套的格式错误的表示形式,例如<b><i>text</b></i>

一种方法是预解析字符串,然后将格式设置样式应用于每个字符。 因此,您应该使用粗体和斜体,用e表示粗体和斜体,等等。使用散列表示样式组合可以更轻松,更快速地进行操作-阅读第一个字符,弄清楚它是什么样式(请留意这种打开和关闭样式,您就可以找到标签),如果哈希中已经存在该哈希,请将该哈希号分配给字母。 如果不是,请获取新的哈希号并进行分配。

现在,您可以将字母及其样式哈希与您的搜索进行比较,并获得格式和内容匹配。 将其堆叠在您的类似比赛之上,您将拥有所需的东西。

-亚当

不确定是否理解您所说的一切,但是使用正则表达式似乎是解决您所讨论的问题的好方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM