Wie bekomme ich in einem IFrame den selektierten Text inkl. Html Tags

Thopeto

Erfahrenes Mitglied
Guten Tag,

ich habe einen IFrame im design Modus und nun möchte ich den selektierten Text bekommen, inkl html Tags. Ich bekomme nur immer den reinen Text ohne jegliche Html Elemente, die in diesem Abschnitt beinhaltet sind.

Bisher bekam ich den selektierten Text so:
Code:
this.getSelection = function() {
			var win = this.frame;
      var doc = this.frame.document;
    
      if (win.getSelection) {
        return win.getSelection().toString();
      } else if (doc.selection && doc.selection.createRange) {
        return doc.selection.createRange().text;
      }
		};

Der liefert mir aber nur den reinen Text wieder. Kann jmd helfen?

Gruß
 
Moin,

im IE geht das recht einfach über die Eigenschaft htmlText des Textrange-Objektes.

In anderen Browsern ist das etwas umständlicher.
Dort kannst du bspw. den Inhalt des TextRange in einen anderen Knoten kopieren, und dann das innerHTML dieses Knotens auslesen:
Code:
/**
  * function getSelectedHtml
  * @param object win window-Object
  * @return string HTML-Source der Selektion 
  **/
function getSelectedHtml(win)
{
  if(document.all && !window.opera)
  {
    var r=win.document.selection.createRange().htmlText;
  }
  else
  {
    try
    {
        var n=win.document.createElement('div');
        n.appendChild(win.getSelection().getRangeAt(0).cloneContents());      
        r=n.innerHTML;
        delete n;
    }
    catch(e)
    {
      var r='';
    }
}
return r;
}
 
vielen dank für deine schnelle antwort. Es funktioniert auch nahezu perfekt, nur wenn man im IE ein Bild markiert hat, greift win.document.selection.createRange().htmlText; nicht. Weißt du zufällig, wie ich rausfinden kann, ob ein objekt markiert ist?

gruß
Thorsten
 
Da wird lt. Recherchen ein anderer Range-Typ namens "Control" erzeugt, dieser besitzt keine Eigenschaft htmlText.

Dafür besitzt er aber eine Collection mit allen beinhalteten Elementen :)

Das nötige Update für den IE-Zweig:
Code:
if(document.all && !window.opera)
{
  var rng=win.document.selection.createRange();
  var r = rng.htmlText;
  if(typeof r=='undefined')
  {
    r=rng.item(0).outerHTML
  }
}
 

Neue Beiträge

Zurück