アプリ版:「スタンプのみでお礼する」機能のリリースについて

htmlで書かれたテーブルをドラッグして選択状態にした後、Ctrl+Cをして、
メモ帳に貼り付けると、テーブルの見た目のままテキストだけが取得できますよね?

これと同じように、あるボタンをクリックしたときに、テーブル内のテキストを見た目とおなじように
(行や改行など)取得したいのですが、
javascriptでやる方法はないでしょうか?

なお、以下のようにすると、テキストのみではなく、
テーブル内に含まれるhtmlのタグ名などのテキストも全て取得してしまいます。

 テーブル名 tablename
 var ans = "";
var Tbl=document.getElementById(tablename);
for(var i=0;i< Tbl.rows.length;i++){
ans=Tbl.rows[i].innerHTML+"\n";
}

A 回答 (1件)

回答がないみたいなので…



rows[i].innerHTMLで取得すると、行単位でHTMLを取得するので<td>~</td><td>~~のような文字列になってしまいます。
セル単位で内容を取得したいのでしょうから、rows[i].cells[j] を単位として処理をする必要があるのではないでしょうか?
また、<td>内にタグがあったりソース上での改行などがあると、innerHTMLだとそのまま取得してしまうので、行区切りの改行と区別がつかなくなる恐れが多分にあります。

文字列化した後でどのように使いたいのか不明なので、よくわかりませんが、勝手に想像して…
*セル内での改行やタブは無視する。(両端の空白もトリム)
*セル単位、行単位で区切り文字を入れる。
という最低限で考えれば、こんなのではどうでしょうか?
(全角空白は半角に)

function hoge(tablename){
 var sepC = "\t"; //cellのseparator(タブ)
 var sepR = "\n"; //rowのseparator(改行)

 var getText = function(node){
  var t = node?(node.textContent || node.innerText):"";
  return t?t.replace(/^ +| +$|\t|\r|\n/g,""):t;
 }

 var i, j, row, cel, result = "";
 var tbl = document.getElementById(tablename);
 for(i=0; row=tbl.rows[i++];){
  if(i!=1) result += sepR;
  for(j=0; cel=row.cells[j++];)
   result += (j!=1?sepC:"") + getText(cel);
 }
 return result;
}

区切り文字はとりあえず「タブ」と「改行」にしてあります。
ソース内の両端以外の空白の連続はそのまま残していますので、取り除くときは適宜に…
    • good
    • 0
この回答へのお礼

innerText を使えばいいんですね!
丁寧にソースも書いていただいて、ありがとうございました。

お礼日時:2011/07/28 09:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!