Autor |
Nachricht |
Kash
Threadersteller
Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht:
|
Verfasst Fr 27.11.2009 11:25
Titel [javaScript] - Wrap Element |
|
|
Hallo zusammen,
ich habe mir eine Function geschrieben, die ein auf der Webseite markierten Text wrappen soll.
Die schaut so aus.
Code: |
function bold() {
mark = window.getSelection();
for (i = 0; i < frames.length; i++)
{
mark = frames[i].window.getSelection();
if (mark)
{
break;
}
}
if(mark)
{
//alert(mark);
var wrapper = document.createElement('strong');
var elem = mark;
wrapper.appendChild(elem.cloneNode(true));
elem.parentNode.replaceChild(wrapper, elem);
}
}
|
Jetzt bekomme ich immer die Fehlermeldung
Zitat: | Fehler: elem.cloneNode is not a function |
Entweder bin ich heute Betriebsblind, aber ich finde den Fehler nicht.
Zur Info, es handelt sich hier um ein HTML5 Dokument mit dem zugehörigen Doctype.
Da ich evtl gedacht habe das das der Fehler sein kann.
Oder bekomme ich den Fehler, weil der Markierte Text selbst keinen DOM Knoten besitzt?
|
|
|
|
|
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
|
|
|
|
Anzeige
|
|
|
Kash
Threadersteller
Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht:
|
Verfasst Fr 27.11.2009 12:01
Titel
|
|
|
Danke. Ist das was spezielles für die Gecko's?
// So habe die Function ein wenig umgeschrieben.
Gleichzeitig nehme ich noch mehrere Markierungen (durch drücken von STRG) mit auf.
Die Fehlermeldung bleibt allerdings dieselbe
Code: | function bold() {
var selection = window.getSelection();
if (!selection || selection.isCollapsed) {
return;
}
var mark = [];
for (i = 0, l = selection.rangeCount; i < l; i++) {
mark.push(selection.getRangeAt(i).cloneContents().childNodes[0].data);
}
alert (mark);
if(mark)
{
var wrapper = document.createElement('strong');
var elem = mark;
wrapper.appendChild(elem.cloneNode(true));
elem.parentNode.replaceChild(wrapper, elem);
}
} |
Auch habe ich diese vereinfacht.
Code: | function bold() {
sel = window.getSelection();
mark = sel.getRangeAt(0);
if(mark)
{
//alert(mark);
var wrapper = document.createElement('strong');
var elem = mark;
wrapper.appendChild(elem.cloneNode(true));
elem.parentNode.replaceChild(wrapper, elem);
}
} |
Dennoch bleibt die Fehlermeldung
Zuletzt bearbeitet von Kash am Fr 27.11.2009 12:29, insgesamt 1-mal bearbeitet
|
|
|
|
|
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Fr 27.11.2009 12:30
Titel
|
|
|
Ich würde mich jedenfalls nicht drauf verlassen. In der Regel gibt die Mozilla-Doku aber Hinweise, wenn das Ding nicht dem Standard entspricht oder sogar, wenn es in anderen Browsern - sprich IE - ein Non-Standard Äquivalent gibt.
// getRangeAt() liefert ebenfalls keine Instanz von DOMElement, sondern ein Range-Objekt:
https://developer.mozilla.org/en/DOM/Selection/getRangeAt
Lesen
Zuletzt bearbeitet von bacon am Fr 27.11.2009 12:32, insgesamt 1-mal bearbeitet
|
|
|
|
|
Kash
Threadersteller
Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht:
|
Verfasst Fr 27.11.2009 12:36
Titel
|
|
|
bacon hat geschrieben: | Ich würde mich jedenfalls nicht drauf verlassen. In der Regel gibt die Mozilla-Doku aber Hinweise, wenn das Ding nicht dem Standard entspricht oder sogar, wenn es in anderen Browsern - sprich IE - ein Non-Standard Äquivalent gibt.
// getRangeAt() liefert ebenfalls keine Instanz von DOMElement, sondern ein Range-Objekt:
https://developer.mozilla.org/en/DOM/Selection/getRangeAt
Lesen |
OK ich seh mir das nochmal in Ruhe an.
Danke Dir für die Unterstützung.
Es ist zum glück nur eine Spielerei die ich einbauen möchte.
Und da es nicht dringend ist kann das auch bis Sonntag ruhen.
|
|
|
|
|
|
|
|
Ähnliche Themen |
über css ein Element nach definiertem Element ansprechen
DIV-Element strecken
Div Element Zentrieren
[javascript] mit <select> feld wert an javascript funk
padding für das link <a> Element?
Element absolut in <td> positionieren
|
|