JS插入两个连续的文本节点在一个跨度不当时,不在调试模式
JS insert two successive text Node in a span misbehave when not on debugging mode
我正在开发一个字符工具栏(一个div与按钮)。当用户单击一个字符时,应该将其插入到当前光标位置的内容可编辑范围中。对于第一个插入的字符,它工作得很好,但是当试图直接插入第二个字符时,它被插入到旧的插入符号位置。当我单击span(或从键盘写入,甚至连接调试器或当我设置alert()
时),然后插入第二个字符。
我试过setTimeout
的功能,但它没有帮助。
function Toolbar_Click(event) {
$('#mySpan').focus();
M_InsertTextATCaret(character);
}
function M_InsertTextATCaret(text) {
var retVal = true;
try {
var range = M_GetRange();
if (range) {
var textNode = M_GetTextNode(text);
range.insertNode(textNode);
}
} catch (e) {
retVal = false
};
return retVal;
}
function M_GetTextNode(text) {
var retVal = M_CreateTextNode(text, "p");
return retVal;
}
/// <summary>
/// Create Text Node from copied text
/// </summary>
/// <param name="text">the text</param>
/// <param name="HtmlTagName">the parent Node tag Name</param>
function M_CreateTextNode(text, HtmlTagName) {
var retVal = document.createDocumentFragment();
var p = document.createElement(HtmlTagName);
$(p).html(text);
var child;
while ((child = p.firstChild)) {
retVal.appendChild(child);
}
return retVal;
}
/// <summary>
/// return selection range
/// </summary>
function M_GetRange() {
var retVal;
if (w3) {
retVal = window.getSelection().getRangeAt(0);
} else if (ie) {
retVal = document.selection.createRange();
}
return retVal;
}
有人能帮我吗?
下面的方法解决了问题。
range.collapse(false);
相关文章:
- Javascript,访问一个主要对象模块模式中的每个对象
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 如何缩短MongoDB ObjectId并在Mongoose模式中使用它
- D3.js模式不适用于弧形或圆环图
- Webdriver.io pageObject模式-通过传递参数来定义元素选择器
- 模块模式和这个
- 带有let的JS/EECMAScript6私有字段的模式
- 我是否可以检测到javascript正在被卸载(作为调试模式)
- 执行动态模式弹出
- 注意:wp_enqueue_script调用不正确.在 Wordpress 调试模式下
- AngularJS ui路由器html5模式中断路由
- 包含圆括号的JavaScript Regex模式
- 显示模块模式在Knockout中设置模型的新实例
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 使用模式格式化Number类型输入中的值
- Markdown模式代码镜像正在创建
- JS插入两个连续的文本节点在一个跨度不当时,不在调试模式