【发布时间】:2010-03-22 17:02:36
【问题描述】:
我试图在使用使用“createLink”命令的所见即所得编辑器时添加一个属性。我认为取回浏览器执行该命令后创建的节点是微不足道的。
原来,我只能在 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 - 我的回答有问题吗?我还没有收到您的任何反馈...
-
对不起,您的示例确实有效,并且代码与我的代码几乎相同,只是更紧凑。但是,它仍然不适用于我的实现,我想知道它是否与 iframe 或浏览器编辑器的干扰有关。当我完全工作时,我会更新。感谢您的帮助!
标签: javascript webkit gecko