在上一个问题中,有人让我进入“rangy” http://code.google.com/p/rangy/。即使我不完全理解它也很有趣。我不是 JavaScript 人。但是,我已经设法用它完成了我需要的大多数事情,除了 1。这个概念是一个非常基本的 RTE,只是粗体、斜体等。我做到了,创建了一个链接 - 也做了,好吧可能有花了一个 JS 人 2 分钟花了我几个小时 - 令人沮丧,但我想我正在学习一点 - 非常缓慢。无论如何,使用 rangy 我可以创建(请原谅糟糕的代码)这样的 href 链接:
$('#linkbut').live('click',function(){
var sel = rangy.getSelection();
var range = sel.getRangeAt(0);
range.splitBoundaries();
var textNodes = range.getNodes([3]);
for (var i = 0, len = textNodes.length; i < len; ++i) {
var newLink = document.createElement('a');
newLink.setAttribute('href','test.html');
var linkText = document.createTextNode(sel);
var parent = textNodes[i].parentNode;
parent.insertBefore(newLink,textNodes[i]);
newLink.appendChild(linkText);
range.deleteContents();
}
});
#linkbut
是一个简单的 HTML 按钮,上面的实际 href (test.html) 将来自输入字段的值,而不是“硬编码”。但是如果我想删除它,我无法完成的是“删除”链接。
进一步说明:创建链接后,我可能想删除它,所以我尝试了上面代码的“反向” - 显然没有好处,所以“到目前为止”:
$('#deletelink').live('click',function(){
var sel = rangy.getSelection();
var range = sel.getRangeAt(0);
range.splitBoundaries();
var textNodes = range.getNodes([3]);
var txt = sel.toString();
range.deleteContents();
var replaceText = document.createTextNode(txt);
sel.appendChild(replaceText);
});
我真正想做的(可能不可能)是有一些“通用”函数从上面的节点中删除任何标记元素我想要做的是:
- 获取范围 -
sel = rangy.getSelection();
- 将“sel”转换为字符串变量
var txt = sel.toString();
- 删除内容 -
然后包括
a
元素range.deleteContents();
- 将删除的替换为“文本”版本 var replaceText = document.createTextNode(txt); sel.appendChild(replaceText);
我得到“到目前为止”内容被删除但我无法让“新 - 文本替换”发挥作用。
希望一切都清楚——因为这对我来说不是;)