Hi,
Ich will mit Javascript den Inhalt beschneiden und auf mehrere Seiten aufteilen. Der Text darf sich aber nur über 500 px nach unten erstrecken.
Das ist m.E. schon ein ziemlich fragwürdiger Ansatz.
Wo ein längerer Inhalt ggf. *sinnvoll* aufzuteilen ist, sollte sich eher aus der Struktur dieses Inhaltes selber ergeben, als aus einer vorgegebenen festen Höhe in Pixel.
while (node.offsetTop < 500) {
counter += node.innerHTML.length + 5 + node.tagName.length * 2;
node = node.nextSibling.nextSibling;
}
content.innerHTML = content.innerHTML.substring(0, counter);
}
Ich glaube nicht, dass du mit dieser Zählung einen \*sinnvollen\* „Schnittpunkt“ findest, an dem das HTML aufzuteilen ist.
Du versuchst zwar irgendwie die Länge des Inhaltes und der Tags selber zu berücksichtigen - aber das Tags bspw. auch Attribute haben können, fällt bei deiner Berechnung vollkommen unter den Tisch.
HTML-Code zu zerschnippseln, ist m.E. der vollkommen falsche Ansatz.
Wenn überhaupt - siehe oben - würde ich das \*komplett\* im DOM handeln.
Erst mal das am „tiefsten“ im DOM-Baum liegende Element suchen, dessen Oberkannte außerhalb der vorgegebenen Pixelhöhe liegt (Stichwort offsetTop).
Dann von diesem aus wieder einen Schritt nach oben gehen - und aus dem darüber liegenden Element so lange Inhalte „heraus löschen“, bis es nicht mehr über den Grenze hinaus ragt. D.h., Kindelemente entfernen, und reine Textknoten in einzelne Wörter aufsplitten.
Für die „Fortsetzung“ im nächsten Teil muss dann natürlich dieses Element und ggf. auch noch seine Vorfahren „geklont“ werden, und dabei vom Anfang die Elemente entfernt werden, die schon im vorherigen Teil untergebracht sind.
Das ist keine triviale Aufgabe, und erfordert, dass du dich schon ziemlich sicher „im DOM bewegen“ kannst.
Und den Aufwand ist es m.E. nicht wert. Kein sinnvolles Verhältnis von Kosten und Nutzen, und darüber hinaus wie gesagt eine reichlich willkürliche Teilung, die besser durch eine basierend auf der Struktur des Inhaltes ersetzt wäre.
MfG ChrisB
--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?