【问题标题】:How to add / insert / update text inside contenteditable div at a particular position?如何在特定位置的 contenteditable div 中添加/插入/更新文本?
【发布时间】:2012-04-25 12:20:25
【问题描述】:

HTML 代码如下所示

<div id="txtarea" contenteditable="true">Some text</div>

我必须根据上述 div 中特定位置的某些事件插入一些新文本。 该事件调用函数说 updateDiv(txt, positon)。例如它说
updateDiv("more ",5);

所以 div 应该变成了

<div id="txtarea" contenteditable="true">Some more text</div>

我尝试了很多 javascript 和 jquery,但似乎没有任何效果。

【问题讨论】:

标签: javascript jquery html contenteditable


【解决方案1】:

如果您的可编辑&lt;div&gt; 的内容始终由单个文本节点组成,这相对简单,您可以使用下面的代码。

var div = document.getElementById("txtarea");
var textNode = div.firstChild;
textNode.data = textNode.data.slice(0, 5) + "more " + textNode.data.slice(5);

否则,您需要阅读有关 DOM Ranges 的信息(请注意,IE this answer 之类的内容创建与内容中的字符索引相对应的范围,然后使用 @987654325 @。

var div = document.getElementById("txtarea");
var range = createRangeFromCharacterIndices(div, 5, 5);
range.insertNode(document.createTextNode("more "));

【讨论】:

  • 带有换行符的 contentEditable div 总是会有更多
    形式的节点?怎么可能只有一个文本节点?
  • @RafaelDiaz:问题中的代码有一个带有单个文本节点的 contenteditable 元素。一般来说,如果使用 contenteditable 的应用程序只允许用户编辑没有格式的单个文本节点,那么显然它不太可能很有用。
【解决方案2】:

我是这样做的:

var position = 5,
    txt = "more ";
var current = $("#txtarea").html();
//alert(current.substring(0, position))
var endVal = current.substring(position);
var newValue = current.substring(0, position) + txt + endVal;
$("#txtarea").html(newValue);​

jsfiddle 显示它“正在运行”。

编辑:使用上面评论中列出的方法将jsfiddle 更新为this post。很漂亮!

【讨论】:

  • 但这会移动光标位置。它的contenteditable div
  • @MeetM;是的,删除 div 的 html() 将移动光标位置。您从未提及是什么事件导致需要插入文本。大概您必须尝试绑定到键盘事件。但如果你在有人打字的时候插入文字,他们可能会不喜欢。
【解决方案3】:

使用这个功能:

String.prototype.splice = function( position, newstring ) {
    return (this.slice(0,position) + newstring + this.slice(position));
};

并将此功能用作:

var oldstr=$('#txtarea').html();
var newstr='more';
var position = 5;
$('#txtarea').html(oldstr.splice(position , newstr);

【讨论】:

    猜你喜欢
    • 2014-07-29
    • 1970-01-01
    • 2019-11-07
    • 2010-09-20
    • 1970-01-01
    • 2012-05-11
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多