Dojo 带有突出显示html的dijit.InlineEditBox

Dojo 带有突出显示html的dijit.InlineEditBox,dojo,highlight,inlineeditbox,Dojo,Highlight,Inlineeditbox,我有一些dijit.InlineEditBox小部件,现在我需要在这些小部件上添加一些搜索高亮显示,因此我返回的结果在匹配的单词上带有一个span class=“highlight”。生成的代码如下所示: <div id="title_514141" data-dojo-type="dijit.InlineEditBox" data-dojo-props="editor:\'dijit.form.TextBox\', onFocus:titles.save_old_value,

我有一些dijit.InlineEditBox小部件,现在我需要在这些小部件上添加一些搜索高亮显示,因此我返回的结果在匹配的单词上带有一个span class=“highlight”。生成的代码如下所示:

<div id="title_514141" data-dojo-type="dijit.InlineEditBox" 
     data-dojo-props="editor:\'dijit.form.TextBox\', onFocus:titles.save_old_value, 
     onChange:titles.save_inline, renderAsHtml:true">Twenty Thousand Leagues <span 
     class="highlight">Under</span> the Sea</div>
2万海里
这看起来和预期的一样,但是,当我开始编辑标题时,添加的跨度就会显示出来。如何使编辑器删除添加的跨距,以便只保留文本

在这种特殊情况下,书籍的标题中没有html,因此某种形式的完整标记剥离应该可以工作,但最好找到一个解决方案(如果是带有dijit.Editor小部件的简短描述字段),其中保留现有html,只删除突出显示范围

另外,如果你能建议一个更好的方法(内联编辑和单词突出显示),请让我知道


谢谢大家!

这将如何影响编辑器中显示的内容?这取决于您允许进入字段的内容-您需要一个富文本编辑器(巨大的内存)来正确处理html

这些RegExp将删除XML标记

this.value = this.displayNode.innerHTML.replace(/<[^>]*>/, " ").replace(/<\/[^>]*>/, '');
this.value=this.displayNode.innerHTML.replace(/]*>/,“”).replace(/]*>/,“”);
下面是以下代码的运行示例:

2万海里
this.value=this.displayNode.innerHTML。
替换(/]*>/,“”)。
替换(/]*>/,'');
这是继承的(论点);
renderAsHtml属性只修剪“一层”,因此嵌入的HTML仍然是HTML afaik。通过以上操作,您应该能够1)覆盖
onFocus
处理,2)自己设置可编辑值,3)调用“old”
onFocus
方法

或者(如果你有allready set“titles.save.*”的道具,可以使用
dojo/connect
而不是
dojo/method
——但是你需要先到达那里,比如说

<div id="title_514141" data-dojo-type="dijit.InlineEditBox" 
     data-dojo-props="editor:\'dijit.form.TextBox\', onFocus:titles.save_old_value, 
     onChange:titles.save_inline, renderAsHtml:true">Twenty Thousand Leagues <span 
     class="highlight">Under</span> the Sea

 <script type="dojo/method" event="onFocus">
   this.value = this.displayNode.innerHTML.
      replace(/<[^>]*>/, " ").
      replace(/<\/[^>]*>/, '');
   this.inherited(arguments);
 </script>
</div>