我看到你正在使用 Rangy,但我根本不知道如何使用它。在我意识到 Rangy 是什么之前,我查找了如何获取当前选择。我找到了一个获取它并用传入的值替换它的函数。我最终修改了它,但它是:
http://jsfiddle.net/fjYHr/1/
$(document).ready(function () {
$("#setlink").click(function () {
replaceSelectedText("jumplink");
});
});
function replaceSelectedText(nameValue) {
var sel, sel2, range;
if (window.getSelection) {
sel = window.getSelection();
sel2 = ""+sel; // Copy selection value
if (sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
var newA = document.createElement("a");
newA.name = nameValue;
newA.innerHTML = sel2;
range.insertNode(newA);
}
} else if (document.selection && document.selection.createRange) {
// Not sure what to do here
range = document.selection.createRange();
var newA = "<a name='" + nameValue.replace(/'/g, "") + "'>" + range.text + "</a>";
range.text = newA;
}
}
请注意我如何存储原始当前选择,然后将其替换为使用传入值设置的<a>
元素。name
至于document.selection
部分(似乎被 IE < 9 使用),我不能 100% 确定我提供的代码会起作用(实际上允许在选择中使用 HTML,而不是转义它)。但这是我的尝试:)