mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 27.04.2024 03:49 Benutzername: Passwort: Auto-Login

Thema: [javaScript] - Wrap Element vom 27.11.2009


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [javaScript] - Wrap Element
Autor Nachricht
Kash
Threadersteller

Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht: Männlich
Verfasst Fr 27.11.2009 11:25
Titel

[javaScript] - Wrap Element

Antworten mit Zitat Zum Seitenanfang

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?
  View user's profile Private Nachricht senden
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Fr 27.11.2009 11:56
Titel

Antworten mit Zitat Zum Seitenanfang

getSelection() liefert nicht DOMNode, sondern Selection: https://developer.mozilla.org/en/DOM/Selection

Da musste dann mit den Eigenschaften des Selection-Objekts herumkaspern.
  View user's profile Private Nachricht senden
Anzeige
Anzeige
Kash
Threadersteller

Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht: Männlich
Verfasst Fr 27.11.2009 12:01
Titel

Antworten mit Zitat Zum Seitenanfang

bacon hat geschrieben:
getSelection() liefert nicht DOMNode, sondern Selection: https://developer.mozilla.org/en/DOM/Selection

Da musste dann mit den Eigenschaften des Selection-Objekts herumkaspern.


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
  View user's profile Private Nachricht senden
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Fr 27.11.2009 12:30
Titel

Antworten mit Zitat Zum Seitenanfang

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 *zwinker*


Zuletzt bearbeitet von bacon am Fr 27.11.2009 12:32, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
Kash
Threadersteller

Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht: Männlich
Verfasst Fr 27.11.2009 12:36
Titel

Antworten mit Zitat Zum Seitenanfang

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 *zwinker*


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.
  View user's profile Private Nachricht senden
 
Ä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
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.