Próbuję dodać atrybut podczas korzystania z edytora WYSIWYG, który używa polecenia "createLink". Sądziłem, że odzyskanie węzła utworzonego po przeglądaniu tego polecenia będzie trywialne.Odzyskiwanie węzła nadrzędnego z zaznaczenia (zakresu) w Gecko i pakiecie Webkit
Okazuje się, że mogę pobrać ten nowo utworzony węzeł tylko w IE. Jakieś pomysły?
Poniższy kod demonstruje problem (dzienniki debugowania na dole przedstawiają różne wyjścia w zależności od przeglądarki):
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"
Dzięki za pomoc w tej sprawie, mam prana pytania związane z na SO bez powodzenia!
@jason - Czy jest coś nie tak z moją odpowiedź? Nie otrzymałem jeszcze od Ciebie żadnych opinii ... – gnarf
Niestety, twój przykład działa, a kod jest prawie taki sam jak ten, który mam po prostu bardziej kompaktowy. Jednak nadal nie działa dla mojej realizacji, zastanawiam się, czy może to mieć coś wspólnego z ingerencją elementu iframe lub edytora przeglądarki. Będę aktualizował, gdy mam go w pełni sprawny. Dzięki za pomoc! – Jason