我试图只在这个小提琴http://jsfiddle.net/yarkpakv/中加注文字hel
,但它似乎没有用,我做错了什么?
var range = document.createRange();
var root_node = document.getElementById("test");
range.setStart(root_node,0);
range.setEnd(root_node,3);
var newNode = document.createElement("b");
range.surroundContents(newNode);

<div id="test">
<p>h</p>ello
</div>
&#13;
答案 0 :(得分:9)
您需要可视化<div id="test">
元素的DOM结构。它包含三个孩子:
仅包含空格的文本节点。
<p>
元素,其中包含值为h
的文本节点。
值为ello
的文本节点。
因此,您的范围必须以<p>
元素开头,并以ello
文本节点结尾,在两个l
字符之间。因此:
var range = document.createRange();
var root_node = document.getElementById("test");
// Start at the `<p>` element.
range.setStart(root_node, 1);
// End in the `ello` text node, between the two `l`s.
range.setEnd(root_node.childNodes[2], 2);
var newNode = document.createElement("b");
range.surroundContents(newNode);
这里是fiddle。
答案 1 :(得分:0)
得到了......
var range = document.createRange();
var root_node = document.getElementById("test");
range.setStart(root_node.firstChild,0);
range.setEnd(root_node.firstChild,3);
var newNode = document.createElement("b");
range.surroundContents(newNode);
在所有文档中,他们引用了“Child”......这解决了这个问题。对于你的小提琴,它将包含字母“h”和两个<p>
和</p>
标签。取出它们, hel 变为粗体。
<强>更新强>:
显然,空白会导致问题......
HTML ...
TEST
在这里工作...... jsFiddle
参考... HERE