0

複数のテキストエリア (100) を含む html シートがあり、それらはすべて同じ ID「編集」を持っています。

私の問題は、すべての単語を個別に数えたいということです...

インターネットで見つけたコードをいくつか試しましたが、最初のテキストエリアでは正常に動作しますが、2番目のテキストエリアでは動作しません...

私は JavaScript のまったくの初心者で、どこから始めればよいかさえわかりません。すべての助けに感謝します。

ありがとう

4

5 に答える 5

1

ID で要素を検索すると、1 つしか返されないため、このアプローチは複数の要素に対しては機能しません。あなたができることは、IDを繰り返すことです。たとえば、要素 1 の id = "edit1"、要素 2 = "edit2"、要素 100 = "edit100" などです。このようにして、単純な for ループでそれらすべてに簡単にアクセスできます。

var rootID = "edit";
var totalWordCount = 0;
for (var i=0; i<100; i++) {
  var textElement = document.getElementById(rootID + i);
  var textBoxContents = textElement.value;

  // Count the words in one textbox.
  var textBoxWordCount = 0;
  // These are optional, they are there to account for new lines or double spaces
  // and will help make your word count more accurate.
  textBoxContents = textBoxContents.replace(/(^\s*)|(\s*$)/gi,"");
  textBoxContents = textBoxContents.replace(/[ ]{2,}/gi," ");
  textBoxContents = textBoxContents.replace(/\n /,"\n");
  // This splits up words and counts them based on whether there is a space 
  // between them or not. 
  textBoxWordCount = textBoxContents.split(' ').length;

  // Add this number of words to the total.
  totalWordCount += textBoxWordCount;
}

// totalWordCount now holds the total number of words in all your boxes!
于 2013-05-16T15:22:34.533 に答える
0

非常に重要なID の並べ替えが完了したら、次のフィドルを使用してください - http://jsfiddle.net/dXcLH/1

このフィドルでは、それぞれを繰り返し処理textareaし、リストに値を設定します。

于 2013-05-16T15:22:28.367 に答える
0

次のようなことを試すことができます:

// tas is all your textareas
var tas= document.getElementsByName("textareas"), 
  // or document.getElementsByTagName("textarea")
i,arr=[];
for(i=0;i<tas.length;i++){
  arr.push({
    textareaName:tas[i].name,
    //rough word count
    wordCount:tas[i].value.split(/\b[^\d\w\-]+\b/ig).length
  }];
}
console.log(arr);

Chrome でこのコードを確認し、F12 を押して、コンソールで arr 変数を確認します。それをクリックして、その値を調べることができます。

于 2013-05-16T15:26:00.697 に答える
0

HTML 仕様で述べられているように、ID は一意でなければなりません。これに準拠しているため、JavaScript コードは失敗しています。最初の ID と一致した後、要素のチェックを続行する理由はありません。

于 2013-05-16T15:13:36.643 に答える