Ajax工具包文本编辑器子控件
Ajax tool kit text editor sub controls
我使用的是Microsoft ajax工具包提供的文本编辑器
它在浏览器上渲染iframe
。我已经在编辑器中添加了一个下拉列表,我希望当用户更改下拉索引时,该值应该添加到编辑器当前的光标位置。
<iframe id="myIframe"></iframe>
<select id="myOptions">
<option value="myValue1">My Value 1</option>
<option value="myValue2">My Value 2</option>
<option value="myValue3">My Value 3</option>
<option value="myValue4">My Value 4</option>
<option value="myValue5">My Value 5</option>
</select>
和javascript
$.fn.extend({
insertAtCaret: function (myValue) {
var doc = this[0].ownerDocument;
var win = doc.defaultView || doc.parentWindow;
if (win.getSelection) {
var selObj = win.getSelection();
var myRange = selObj.getRangeAt(0);
selObj.deleteFromDocument();
myRange.insertNode(doc.createTextNode(myValue));
selObj.addRange(myRange);
selObj.collapseToEnd();
this.focus();
}
else if (doc.selection) {
this.focus();
sel = doc.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.innerHTML = this.innerHTML.substring(0, startPos) + myValue + this.innerHTML.substring(endPos, this.innerHTML.length);
this.focus();
this.selectionStart = startPos + myValue.length;
this.selectionEnd = startPos + myValue.length;
this.scrollTop = scrollTop;
}
}
});
$("#myIframe").contents().find("body").attr("contenteditable", "true");
$("#myOptions").on("change", function() {
$("#myIframe").contents().find("body").insertAtCaret($(this).val());
});
它工作得很好小提琴
但当我将其更改为ul
和li
时,它不起作用。
<iframe id="myIframe"></iframe>
<ul id="myOptions">
<li value="myValue1">My Value 1</li>
<li value="myValue2">My Value 2</li>
<li value="myValue3">My Value 3</li>
<li value="myValue4">My Value 4</li>
<li value="myValue5">My Value 5</li>
</ul>
脚本
$("#myIframe").contents().find("body").attr("contenteditable", "true");
$("#myOptions").on("change", function() {
$("#myIframe").contents().find("body").insertAtCaret($(this).val());
});
Fiddle
编辑:-在Mozila中工作,但不在IE 中工作
使用非表单元素时,只需将.val()
更改为.text()
即可:
$("#myIframe").contents().find("body").insertAtCaret( $(this).text() );
http://jsfiddle.net/mblase75/5Pc55/46/
相关文章:
- 获取中继器控件ASP.Net中显示的单击项目文本框
- 如何使用ngModel将自定义控件的提供程序扩展器分离到Angular 2中的单独文件中
- 中继器控件内的 IF 条件
- 如何向JavaScript计时器添加控件
- 如何使用angular js验证器执行下拉控件验证
- Ace 编辑器上的键控事件
- 多个 YouTube 播放器,位于选项卡式角度 UI 控件中.想要添加折叠
- asp.net ajaxtoolkit 自定义控件扩展器
- 可编辑的、扩展的引导输入列表控件
- 水星编辑器 0.9 - 内容 iFrame 位于编辑器控件后面,高度错误
- 如何在WordPress中隐藏定制器控件
- 在网站中集成场景 7 浮出控件查看器
- 无法修改控件集合,因为控件包含代码块(即 <% ..%>) Ajax 工具包 HTML 编辑器
- 如何在javascript中的其他地方引用控件包装器的值
- 使用两个选择控件编辑表单,以便在首次启动时进行筛选
- 将非按钮控件添加到TinyMCE编辑器4.x
- Knockout和MVC——绑定到使用模板化编辑器呈现的控件
- 剑道网格使用内联编辑和自定义编辑器下拉控件
- JS文本编辑器控件,具有灵活的动态视觉样式功能
- Ajax工具包文本编辑器子控件