2016-09-06 3 views
3

私はテキストエリアの各行の文字を数えようとしています。javascript textarea行ごとの文字数

音節数をhttp://jsfiddle.net/5Zwkq/19/にするためにこのコードを適用しようとしましたが、成功しませんでした。どんな助けもありがとう。

function $CharCount($input) { 
 
    $("[name=set_" + $input + "]").keyup(function() { 
 

 
    var arrayOfLines = $("[name=set_" + $input + "]").val().match(/[^\r\n]+/g); 
 
    var tempArr = []; 
 
    var $content; 
 
    var char; 
 
    var $result; 
 

 
    for (var i = 0; i < arrayOfLines.length; i++) { 
 
     $content = arrayOfLines[i]; 
 
     $result = $content.val().length; 
 
     tempArr.push($result); 
 
    } 
 

 
    $("[name=set_" + $input + "_content]").val(tempArr); 
 

 
    }); 
 
} 
 

 
(function($) { 
 
    $CharCount("a"); 
 
})(jQuery);
<textarea rows="8" cols="3" class="alignright" name="set_a_syllable_count" readonly="readonly" /></textarea> 
 
<textarea rows="8" cols="30" name="set_a"></textarea>

答えて

2

.val()は、この行にエラーを引き起こしている:それを取り外し

$result = $content.val().length; 

は正しく(少なくとも計算領域内の)ラインの長さをカウントします。

counter textareaのバグについては、jQueryセレクタが間違っているだけです。要素set_a_syllable_countの名前をset_a_contentに変更します。

もう1つ問題があります。テキストエリアが空の場合、空の正規表現の結果(正確にはnull)をチェックしているため、エラーが発生します。

if (arrayOfLines !== null) { ... counting code ... } 

固定コード:

function $CharCount($input) { 
 
    $("[name=set_" + $input + "]").keyup(function() { 
 

 
    var arrayOfLines = $("[name=set_" + $input + "]").val().match(/[^\r\n]+/g); 
 
    var tempArr = []; 
 
    var $content; 
 
    var char; 
 
    var $result; 
 

 
    if (arrayOfLines !== null) { 
 
     for (var i = 0; i < arrayOfLines.length; i++) { 
 
     $content = arrayOfLines[i]; 
 
     $result = $content.length; 
 
     tempArr.push($result); 
 
     } 
 
    } 
 

 
    $("[name=set_" + $input + "_content]").val(tempArr); 
 

 
    }); 
 
} 
 

 
(function($) { 
 
    $CharCount("a"); 
 
})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<textarea rows="8" cols="3" class="alignright" name="set_a_content" readonly="readonly" /></textarea> 
 
<textarea rows="8" cols="30" name="set_a"></textarea>

+0

完璧に働いて、あなたがしたことを説明してくれてありがとう。それは私がより良くなるのに役立ちます。 – crecorn

+0

1年後ですが、私はこの結果を得ようとしていますが、左側のテキストエリアのカウンターがコンマで連結されている理由を理解できません。このコードでは、私はそれが見えないので、これが起こりますか? –

+0

@JonathanvanClute 'tempArr'は配列なので、最後の' .val(tempArr) '呼び出しでその内容を設定するときに起こる文字列への自動変換はそれを連結しなければなりません。デフォルトの動作では、コンマで連結します。このテキストエリアには、手動で連結されたデータ( '.val(tempArr.join("連結値、例えばスペース> "))')を入力する必要があります。 – mdziekon

1

私の提案は次のとおりです。

function $count_how_many_syllables($input) { 
 
    $("[name=set_" + $input + "]").keyup(function (e) { 
 

 
    var arrayOfLines = $("[name=set_" + $input + "]").val().match(/[^\r\n]+/g); 
 
    var tempArr = []; 
 
    var $charsPerLine; 
 

 
    for (var i = 0; i < arrayOfLines.length; i++) { 
 
     $charsPerLine = arrayOfLines[i].length; 
 
     tempArr.push($charsPerLine); 
 
    } 
 

 
    $("[name=set_" + $input + "_syllable_count]").val(tempArr.join('\n')); 
 

 
    }).trigger('keyup'); 
 
} 
 

 
$(function() { 
 
    $count_how_many_syllables("a"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<textarea rows="8" cols="3" class="alignright" name="set_a_syllable_count" readonly="readonly" /></textarea> 
 
<textarea rows="8" cols="30" name="set_a">i would appreciate 
 
any help 
 
at all</textarea>
全く一致する行が存在しないときには、単純に実行するために、カウントコードを防ぐために持っています

0

私はやや遅すぎましたが、ここでは、より少ない労力で同じことを実現するいくつかのコードがあります。

content = content.split(" ").join(""); 
content = content.replace(/(.)(?=.*\1)/g, ""); 
count_no_repeat.push(content.length); 

コンプリート:また、各行の文字列から削除する、数えでの繰り返し文字を避けることができ

var lines = $(input).val().match(/[^\r\n]+/g); 
    var count = []; 
    var content; 
    for (var i = 0; i < lines.length; i++) { 
     content = lines[i].split(" ").join(""); 
     count.push(content.length); 
    } 

0

この

 function count() { 
 

 
      var lines = document 
 
       .getElementById("area") 
 
       .value 
 
       .split("\n"); 
 

 
      var lengths = []; 
 

 
      for (var i = 0; i < lines.length; i++) { 
 
       var lineLength = lines[i].length; 
 
       document.write(lineLength+ "</br>"); 
 
       lengths.push(lineLength); 
 
      } 
 
     }
<textarea id="area"></textarea> 
 
    <br /> 
 
    <button onclick="count();">Count</button>
は私のソリューションです。コード: http://jsfiddle.net/bwnL9Lgg/3/

関連する問題