长串分页做得对

时间:2011-12-25 23:02:15

标签: javascript regex string text

我想将一个长文本拆分成较小的块,这些块将充当页面。

    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个字符,然后返回到最后一个空格)会好得多。 你会如何实现它?

Second shot Third shot

2 个答案:

答案 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中查看。