在之前的問題中,有人把我帶到「rangy」http://code.google.com/p/rangy/。即使我沒有完全理解它也很有趣。我不是一個JavaScript人。然而,我已經設法做了大部分事情,除了1之外,我需要這個概念。這個概念是一個非常基本的RTE,只是粗體,斜體等。我管理它,創建了一個鏈接 - 也完成了它,好的。採取了一個JS小夥子2分鐘花了我幾個小時 - 令人沮喪,但我認爲我學到了一點 - 非常緩慢。總之,使用瘦長我可以創建(藉口差代碼)一個href鏈接這樣的:JavaScript:如何從節點中刪除標籤?
$('#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」int o一個字符串變量
var txt = sel.toString();
- 刪除該內容 - 包括
a
元件range.deleteContents();
然後 - 替換爲 「文本」 的版本變種replaceText = document.createTextNode(TXT)的刪除; sel.appendChild(replaceText);
我得到「迄今爲止」的內容被刪除,但我無法獲得「新文本替換」的功能。
希望一切都清楚 - 因爲這一切對我來說並不)
你爲什麼不做element.html(「」)?或者我不理解你的問題? – mattsven 2011-03-20 15:04:50
@NeXXeuS - 現在你讓我完全困惑:)我甚至不知道如何,但重點是有可能在一篇文章中有很多鏈接,但我只想刪除選定的鏈接 – 2011-03-20 15:08:38