我想将一个长文本拆分成较小的块,这些块将充当页面。
var longText = document.getElementById('content').innerHTML;
for (i=0; i<10; i++) {
var page = longText.substring(i*100,(i+1)*100);
document.write(page + "<br /><hr />");
}
在jsfiddle上查看here。
此代码拆分文本,但是以愚蠢的方式将文字切成两半。 例如,创建以一定数量的字符结尾的最后一个空格的子串(计数100个字符,然后返回到最后一个空格)会好得多。 你会如何实现它?
答案 0 :(得分:0)
我会用:
function paginate(longText, pageSize) {
var parts = longText.split(/[ \n\t]/g);
if (parts.length == 0)
return [];
var pages = [parts.unshift()];
for (var i = 0; i < parts.length; i += 1) {
var part = parts[i];
if (part.length + pages[pages.length - 1].length < pageSize) {
pages[pages.length - 1] += " " + part;
} else {
pages.push(part);
}
}
return parts;
}
答案 1 :(得分:0)
对于那些寻找合适答案的人:
<div id="long-text">Lorem ipsum [...]</div>
<script>
var splitter = function(id) {
var longText = document.getElementById(id).innerHTML;
var pageLenght = 200;
var charsDone = 0;
var htmlBefore = "<p>";
var htmlAfter = "</p>";
while (charsDone <= longText.length && (pageLenght+charsDone)<longText.length) {
var pageBox = longText.substr(lastSpace,pageLenght);
var lastSpace = charsDone + pageBox.lastIndexOf(" ");
var page = longText.substring(charsDone,lastSpace);
document.write(htmlBefore + page + htmlAfter);
charsDone = lastSpace;
}
document.write(longText.substr(lastSpace,pageLenght));
}
splitter("#long-text");
您可以轻松使用数组而不是写入文档。 您还需要根据需要设置html,在htmlBefore和htmlAfter中执行。 在行动here中查看。