我想在使用使用「createLink」命令的wysiwyg編輯器時添加一個屬性。我認爲在瀏覽器執行那個命令之後找回創建的節點是很簡單的。從Gecko和Webkit中的選擇(範圍)中檢索父節點
原來,我只能在IE中抓住這個新創建的節點。有任何想法嗎?
下面的代碼演示了這個問題(在底部顯示不同的輸出調試日誌在每個瀏覽器):
var getSelectedHTML = function() {
if ($.browser.msie) {
return this.getRange().htmlText;
} else {
var elem = this.getRange().cloneContents();
return $("<p/>").append($(elem)).html();
}
};
var getSelection = function() {
if ($.browser.msie) {
return this.editor.selection;
} else {
return this.iframe[0].contentDocument.defaultView.getSelection();
}
};
var getRange = function() {
var s = this.getSelection();
return (s.getRangeAt) ? s.getRangeAt(0) : s.createRange();
};
var getSelectedNode = function() {
var range = this.getRange();
var parent = range.commonAncestorContainer ? range.commonAncestorContainer :
range.parentElement ? range.parentElement():
range.item(0);
return parent;
};
// **** INSIDE SOME EVENT HANDLER ****
if ($.browser.msie) {
this.ec("createLink", true);
} else {
this.ec("createLink", false, prompt("Link URL:", "http://"));
}
var linkNode = $(this.getSelectedNode());
linkNode.attr("rel", "external");
$.log(linkNode.get(0).tagName);
// Gecko: "body"
// IE: "a"
// Webkit: "undefined"
$.log(this.getSelectedHTML());
// Gecko: "<a href="http://site.com">foo</a>"
// IE: "<A href="http://site.com" rel=external>foo</A>"
// Webkit: "foo"
$.log(this.getSelection());
// Gecko: "foo"
// IE: [object Selection]
// Webkit: "foo"
感謝有這方面的幫助,我已經沖刷上SO相關的問題,但沒有成功!
@jason - 是不是有什麼毛病我的答案嗎?我還沒有收到你的任何反饋信息... – gnarf 2010-03-31 21:18:59
對不起,你的例子確實有效,代碼和我剛纔更緊湊的代碼幾乎一樣。然而,它仍然不適用於我的實現,我想知道它是否可能與iframe或瀏覽器編輯器產生干擾。當我完全正常工作時,我會進行更新。謝謝您的幫助! – Jason 2010-04-01 21:01:40