Ich versuche, ein Attribut hinzuzufügen, wenn Sie einen WYSIWYG-Editor verwenden, der den Befehl "createLink" verwendet. Ich dachte, es wäre trivial, den Knoten zurück zu bekommen, der erstellt wird, nachdem der Browse diesen Befehl ausgeführt hat.Abrufen von Elternknoten aus Auswahl (Bereich) in Gecko und Webkit
Stellt sich heraus, ich bin nur in der Lage, diesen neu erstellten Knoten in IE zu greifen. Irgendwelche Ideen?
Der folgende Code das Problem (Debug-Protokolle unten zeigen verschiedene Ausgabe in jedem Browser) zeigt:
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"
Vielen Dank für jede Hilfe zu diesem Thema habe ich Fragen ohne Erfolg auf SO gescheuert!
@ Jason - Gibt es etwas falsch mit meiner Antwort? Ich habe noch kein Feedback von dir gehört ... – gnarf
Sorry, dein Beispiel funktioniert, und der Code ist fast der gleiche wie der, den ich gerade kompakter habe. Allerdings funktioniert es immer noch nicht für meine Implementierung, ich frage mich, ob es etwas mit dem Iframe oder Browser-Editor zu tun haben könnte. Ich werde aktualisieren, wenn ich es voll funktioniere. Danke für die Hilfe! – Jason