Olaf: selection.type im Firefox?

Hallo zusammen,

ich arbeite grade an einem Editor für ein CMS. Mit

var sel = window.getSelection();

ermittle ich im Firefox die aktuelle Markierung im Browserfenster.

Der IE kennt nun noch "document.selection.type", beispielsweise "Control" oder "Text".

Wie kann ich denn im Firefox den HTML Code eines ausgewählten Bildes/Controls ermitteln?

Dank & Gruss

Olaf

  1. Hallo,

    das wird schwierig. Ich hab auch nur einen Ansatz im Kopf:

    getSelection gibt ein Selection-Objekt zurück

    http://developer.mozilla.org/en/docs/DOM:window.getSelection
    http://developer.mozilla.org/en/docs/DOM:Selection

    Da hast du Zugriff auf die betroffenen DOM-Knoten und kannst dir eine Range der Auswahl geben lassen

    http://developer.mozilla.org/en/docs/DOM:Selection:getRangeAt
    http://developer.mozilla.org/en/docs/DOM:range

    Mit der Range hast du Zugriff auf Anfangs- und Endknoten. Um alle Knoten dazwischen zu bekommen, müsste man sich wohl von Hand im DOM-Baum herumhangeln. Und wenn man quasi innerHTML der Range will, zusätzlich serialisieren (jeweils mit innerHTML und dann zusammenfrickeln).

    Ich weiß nicht, ob das weiterhilft, aber mit der Range kann man auch ein ein Dokument-Fragment erstellen

    http://developer.mozilla.org/en/docs/DOM:range.createContextualFragment

    Das muss man dann aber immer noch auf die beschriebene Art durchlaufen, es ist nur einfacher, weil es sich wie ein DOM-Knoten verhält (childNodes und so soweit ich weiß).

    Mathias

    1. Hallo,

      ich hatte vergessen, auf den XMLSerializer hinzuweisen

      window.onmouseup = function (e) {  
       var selection = window.getSelection();  
       if (selection.isCollapsed) {  
        return;  
       }  
       var range = selection.getRangeAt(0);  
       var documentFragment = range.cloneContents();  
       var htmlString = (new XMLSerializer()).serializeToString(documentFragment);  
       alert(htmlString);  
      };
      

      (dann einfach mal was mit der Maus im Dokument markieren)

      Man kann sich aber auch einen Serializer selber schreiben, der die Kindknoten des Dokument-Fragment-Knotens rekursiv durchläuft, müsste hier im Archiv zu finden sein. XMLSerializer gibt halt XML-Code zurück, also z.B. »Text <IMG SRC="..."/> Text«.

      Mathias