treewalker: Missverständnis?

Beitrag lesen

Hallo,

Hallo, danke für deine Antwort.

Ich verstehe ehrlich gesagt deinen Ansatz nicht.

Ich versuche es nochmal deutlich zu machen. ;-)

Wenn du *eine* Range abfragst mit getRangeAt(0), bekommst du immer nur eine Range, die *eine* Teilmarkierung wiedergibt. Das entspricht einem String. Das DocumentFragment, das cloneContents() zurückgibt, hat daher auch immer nur einen Kindknoten, das ist ein Textknoten. Warum willst du da mit einem NodeIterator arbeiten? Da gibt es doch nichts zu iterieren... ;)

Das ist so nicht richtig. Das DocumentFragment enthält eine komplette Baumstruktur.

Suchst du vielleicht eher das hier? Willst du alle Markierungen im Dokument?

<script type="application/javascript;version=1.7">

[code lang=javascript]function getSelectedTexts () {
var selection = window.getSelection();
if (!selection || selection.isCollapsed) return;
var text_parts = [];
for (let i = 0, l = selection.rangeCount; i < l; i++) {
  text_parts.push(selection.getRangeAt(i).cloneContents().childNodes[0].data);
}
return text_parts;
}


> </script>[/code]  
>   
> Wenn mit Strg mehrere Texte markieren werden, gibt das alle Strings zurück.  
  
Wenn du in einem Dokument etwa folgendes markierst:  
  
~~~html
  
<p>Heute <b>ist</b></p><p>ein schöner Tag</p>  

und in deinem Skript Zeile 8 durch diese beiden ersetzt:

text_parts.push(selection.getRangeAt(i).cloneContents().childNodes[0].childNodes[0].data);  
text_parts.push(selection.getRangeAt(i).cloneContents().childNodes[1].childNodes[0].data);  

enthält text_parts nach der Ausführung die beiden Strings „Heute“ und „ein schöner Tag“.

Mathias

Auf http://developer.mozilla.org/en/DOM/range heißt es dazu: „The Range object represents a fragment of a document that can contain nodes and parts of text nodes in a given document.“.

Es geht mir nicht darum, verschiedene ranges zu durchlaufen, sondern die nodes innerhalb einer range.
Gibt dafür keine andere Lösung als die komplizierte Rekursion? Der nodeIterator wäre doch wie dafür geschaffen...

Wenn jemand einen tollen Ansatz für eine Rekursion hat, wäre ich auch dankbar.

Einen schönen Tag wünscht, weiter auf eine Lösung hoffend

treewalker