Sto tentando di aggiungere un attributo quando si utilizza un editor wysiwyg che utilizza il comando "createLink". Ho pensato che sarebbe stato semplice recuperare il nodo che è stato creato dopo che il browse ha eseguito quel comando.Recupera il nodo principale dalla selezione (intervallo) in Gecko e Webkit
Si scopre che sono in grado di afferrare questo nodo appena creato in IE. Qualche idea?
Il codice seguente illustra il problema (registri di debug in occasione del salone fondo output diverso in ogni browser):
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"
Grazie per qualsiasi aiuto su questo, Ho perlustrato domande relative a SO senza successo!
@ Jason - C'è qualcosa di sbagliato con la mia risposta? Non ho ancora ricevuto alcun tuo commento ... – gnarf
Spiacente, il tuo esempio funziona e il codice è quasi lo stesso di quello che ho appena più compatto. Tuttavia, non funziona ancora per la mia implementazione, mi chiedo se potrebbe avere qualcosa a che fare con l'iframe o l'editor del browser che interferisce. Aggiornerò quando ho completamente funzionante. Grazie per l'aiuto! – Jason