2011-12-25 6 views
0

長いテキストを小さな塊に分割して、ページとして機能させたいと考えています。長い文字列のページ番号が正しく行われました

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

+1

私はJavascriptについてはわかりませんが、多分このページはあなたを助けることができます:http://www.regular-expressions.info/javascript.html - 基本的には、入力をRegExpオブジェクトで循環させ、 lastIndexプロパティ:入力を '/ \ w + \ s + /'で、lastIndex(近くに)を100の倍数にすると、部分文字列があります。 – fge

+0

はい、私はRegExpがここで助けてくれるのではないかと推測しました。しかし、私はこの問題を解決するためにそれらを使用するのに十分なことは知らない。 –

答えて

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

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; 
} 
+0

もう少し説明してください。 –

+1

申し訳ありませんが、完全なアルゴリズムが含まれています。これがはっきりしない場合はお知らせください。 –

+0

Davidに感謝します。私はフィドルを作ったが、動作させなかった:http://jsfiddle.net/5VMLz/ –

関連する問題