0

いくつかの dijit.InlineEditBox ウィジェットがあり、それらに検索の強調表示を追加する必要があるため、一致した単語の上に 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>

これは予想どおりに見えますが、タイトルの編集を開始すると、追加されたスパンが表示されます。テキストのみが残るように、追加されたスパンをエディターで削除するにはどうすればよいですか?

この特定のケースでは、書籍のタイトルに html が含まれていないため、ある種の完全なタグの削除が機能するはずですが、解決策を見つけるとよいでしょう (おそらく dijit.Editor ウィジェットを使用した短い説明フィールドの場合)。既存の html はそのまま残され、ハイライト スパンのみが削除されます。

また、これを行うためのより良い方法 (インライン編集と単語の強調表示) を提案できる場合は、お知らせください。

ありがとうございました !

4

1 に答える 1

0

これはエディタに表示されるコンテンツにどのように影響しますか? むしろ、フィールドに許可するコンテンツに依存します。html を正しく処理するには、リッチテキスト エディター (巨大なフットプリント) が必要になります。

これらの RegExp は XML タグを取り除きます

this.value = this.displayNode.innerHTML.replace(/<[^>]*>/, " ").replace(/<\/[^>]*>/, '');

以下のコードの実行例を次に示します

<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>

renderAsHtml 属性は「1 つのレイヤーから」のみトリムするため、埋め込まれた HTML は依然として html のままです。onFocus上記により、1)処理をオーバーライドし、2) 編集可能な値を自分で設定し、3) 「古い」onFocusメソッドを呼び出すことができるはずです。

または(小道具ですでに「titles.save_*」を設定しているように、dojo/connect代わりにdojo/method- を使用しますが、最初にそこに到達する必要があります。

于 2012-07-21T14:46:25.620 に答える