ここでの主な問題は、Ajax コントロール ツールキットの Html エディターのカーソル位置にテキストを挿入することです。私はこれで数日間頭を悩ませてきましたが、ついに問題を解決する最後の段階に来ました. 正確な問題をよりよく説明するために、少しコンテキストを設定します。
ASP.Net ページ内で HtmlEditor を使用しており、DropDownList から値を挿入しようとしています。クライアント側の JavaScript を使用して、selectedindexchanged イベントを発生させています。たとえば、デザイン パネルに次のようなテキストがあるとします。
123456789
1234[CaretPosition]56789
123456789
ddlText
ここで、変数をキャレット位置に正確に挿入したいと思います。私のコードは現在、値を正しい水平位置に挿入しますが、選択が2行目にあるという事実を無視しているようです。出力は次のようになります。
1234[ddltext]56789
123456789
123456789
キャレットの位置が 2 行目にあったのに、挿入されたテキストが最初の行に表示されていることに注目してください。正しい水平および垂直位置にテキストを挿入するための挿入機能を取得する方法はありますか?
挿入イベントを処理するスクリプトは次のとおりです。
<script type="text/javascript">
$(document).ready(function () {
$('#<%=ddlFields.ClientID%>').change(function () {
var ddltext = $('#<%=ddlFields.ClientID%> option:selected').text();
insertText(ddltext)
});
});
function insertText(text) {
var editorField = document.getElementById('MainContent_Editor1_ctl02_ctl00').contentWindow.document.body.innerHTML;
var range = document.getElementById('MainContent_Editor1_ctl02_ctl00').contentWindow.getSelection().getRangeAt(0);
var selStart = range.startOffset;
var selEnd = range.endOffset;
var innerText = editorField.substring(0, selStart) + text + editorField.substring(selEnd, editorField.length);
document.getElementById('MainContent_Editor1_ctl02_ctl00').contentWindow.document.body.innerHTML = innerText;
}
</script>
私はこの 1 つの要件に対して頭を悩ませてきましたが、本当に新鮮な目を使うことができました。