2016-05-10 9 views
1

各行をテキストエリアに入れたい。テキストエリアは小さく、幅の制約に従って単語をラップします。だから私が試した:私も個別と一緒にwrap="hard"white-space: pre-wrapを試してみました
Textarea - 各行を取得し、改行を見つける

// Sample text: I want to find(line wrapped) all lines here 

$("#textarea1").val().split(/(\r\n|\n|\r)/gm).length 
// 1, not the right length, should be 2 

$("#textarea1").val().split(/\r?\n/g).length 
// 1 

$("#textarea1").val().split("\n").length 
// 1 

$("#textarea1").val().split("\r").length 
// 1 



改行が見つかりませんでした !!助けが必要です、ありがとう。

+0

。シャドーDOMを通過する必要はありません(すべてのブラウザがそうであるわけではありません)。これは、ラッピングがCSSによるもので、テキストエリアの値に保存されないためです。 – evolutionxbox

+1

この質問は非常に関連しているようです:http://stackoverflow.com/questions/3738490/finding-line-wraps – evolutionxbox

+0

うーん、それはかなり関連性があり、ほとんどの仕事をしています! – vjjj

答えて

0

だから私はそれをやった方法だった:

  • クローン透明テキストエリアにtextarea in question - $("#text")。透明なフォントを使用してください。
  • クローンのid値を$("#newtext")に変更し、DOMに追加します。
  • すべてのキーアップで、this character's keyupの前に$( "#text")の値を取ります。その値を$("#newtext")に入れて、$("#newtext").get(0).scrollHeight() > $("#newtext").height()かどうかを確認します。 trueの場合>this文字が改行を引き起こしました。ループ内$("#newtext")
  • 増やし行
    $("#newtext").get(0).scrollHeight() === $("#newtext").height()
  • まで、this文字の前にテキストを取る\nを追加し、$("#text").val()$("#newtext").val()を適用$("#newtext").val()
  • this文字を追加します。
  • DOMから$("#newtext")を削除します。上記の手順のすべてのあらゆるからkeyupイベントに

答え上記

  • 繰り返して、同様のライン上で動作します - だから、stackoverflow.com/questions/3738490/finding-line-wraps – evolutionxbox yesterday

    、基本的に我々は$("#text").val().split("\n")を使用して見つけることができます改行に改行を変換します。

    (注 - 私たちはDOMに透明テキストエリアを追加していない場合は、そのscrollHeight()undefinedになります)私は、このことも可能であるかわからない

  • 0

    あなたが言ったように、テキスト領域は幅の制約に従って単語をラップします。つまり、あなたが見つけるための改行はありません。あなたが探している改行は文字であり、それらの文字はテキストに挿入されていません。

    +0

    文字幅の検出に関する問題は、フォントサイズとフォントタイプに依存します。たとえば、Tahomaでは、l(小L)の幅がGよりも小さいので、差はTimes New Romanほど小さいと思います。それはそれを複雑にします。 – vjjj

    関連する問題