【发布时间】:2014-03-29 12:45:55
【问题描述】:
我正在使用 Microsoft ajax-toolkit 提供的文本编辑器。
它在浏览器上呈现iframe。我在该编辑器中添加了一个下拉列表,我希望当用户更改下拉索引时,应将值添加到编辑器当前光标位置。
我在 SO 上获得了一个代码,它为我提供了编辑器中当前选定的文本如下
function getIframeSelectionText(iframe) {
var win = iframe.contentWindow;
var doc = iframe.contentDocument || win.document;
if (win.getSelection) {
return win.getSelection().toString();
} else if (doc.selection && doc.selection.createRange) {
return doc.selection.createRange().text;
}
}
但我想在当前位置添加一些文本。 html呈现如下
<td class="ajax__htmleditor_editor_editpanel"><div id="Editor1_ctl02" style="height:100%;width:100%;">
<iframe id="Editor1_ctl02_ctl00" name="Editor1_ctl02_ctl00" marginheight="0" marginwidth="0" frameborder="0" style="height:100%;width:100%;display:none;border-width:0px;">
</iframe><textarea id="Editor1_ctl02_ctl01" class="ajax__htmleditor_htmlpanel_default" style="height:100%;width:100%;display:none;"></textarea><iframe id="Editor1_ctl02_ctl02" name="Editor1_ctl02_ctl02" marginheight="0" marginwidth="0" frameborder="0" style="height:100%;width:100%;display:none;border-width:0px;">
</iframe>
</div></td>
我正在尝试如下
$("#imgDropdown").change(function () {
//var iframeBody = $(window.Editor1_ctl02_ctl00.document.getElementsByTagName("body")[0]);
var iframe = document.getElementById("Editor1_ctl02_ctl00");
$("#Editor1_ctl02_ctl00").find("body").insertAtCaret("value");
//alert(getIframeSelectionText(iframe));
});
插入文本的功能不适用于iframe如下
$.fn.extend({
insertAtCaret: function (myValue) {
if (document.selection) {
this.focus();
sel = document.selection.createRange();
sel.text = myValue;
this.focus();
}
else if (this.selectionStart || this.selectionStart == '0') {
var startPos = this.selectionStart;
var endPos = this.selectionEnd;
var scrollTop = this.scrollTop;
this.value = this.value.substring(0, startPos) + myValue + this.value.substring(endPos, this.value.length);
this.focus();
this.selectionStart = startPos + myValue.length;
this.selectionEnd = startPos + myValue.length;
this.scrollTop = scrollTop;
} else {
this.value += myValue;
this.focus();
}
}
})
【问题讨论】:
-
任何控制台错误(例如,安全问题)?
-
具体是什么不起作用?您能否为我们测试是否使用正确的参数等正确调用了该函数?
-
$("#Editor1_ctl02_ctl00").find("body").insertAtCaret("value");不起作用,它应该将值插入当前指针所在的正文中。 -
你能提供一个jsfiddle吗?
-
代码是否正确进入 .insertAtCaret() 函数?你能成功地在那里放置一个警报来测试它是否进入了那个函数?
标签: javascript jquery ajax html-editor