質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.34%

【HTML】<tr></tr>ごとに改行して出力させたい【JavaScript】

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 3,468

MaShiRo_H

score 326

はじめまして。
いつもお世話になっていますm(_ _)m

とても初歩的な質問かもしれませんが、どなたかお力添えいただけますと幸いです。

<table></table>の中のテキストを取得し、
別の要素(例えば<div></div>)の中に再出力する、ということをしたいのですが、
テキストは取得できているものの、<tr></tr>ごとに改行して出力することができず
カンマ区切りでズラリと横並びに表示されてしまいます。

テーブル内は動的に変化するので、for文等で処理できると助かります。
イベントハンドラ等は無視していただいて問題ありません。

var data = [];
var tr = $("table tr");
  for( var i=0,l=tr.length;i<l;i++ ){
    var cells = tr.eq(i).children();
    for( var j=0,m=cells.length;j<m;j++ ){
     if(typeof data[i]=="undefined")
      data[i] = [];
     data[i][j] = cells.eq(j).text();
   }
  }
  $(".here").text(data);
<!-- 取得するテーブル -->
<table>
   <tbody>
      <tr>
         <td>A</td>
         <td>B</td>
         <td>C</td>
      </tr>
      <tr>
         <td>1</td>
         <td>2</td>
         <td>3</td>
      </tr>
   </tbody>
</table>
<!-- 出力先 -->
<div class="here">
</div>

表示させたい内容
A,B,C
1,2,3

現在
A,B,C,1,2,3

すっかり頭が凝り固まってしまっているので、
アドバイスでもかまいません、皆様のご回答お待ちしております。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+3

document.querySelector('.here').innerHTML =
Array.prototype.map.call(document.querySelectorAll('tr'), function(row){
  return Array.prototype.map.call(row.querySelectorAll('td'), function(cell){
    return cell.textContent;
  }) ;
}).join('<br>');


https://jsfiddle.net/20qvq8fn/

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/03 15:19

    わ、短い!
    なるほど、こうやって書けるのですね。。
    一つずつ解読してマスターしていきたいと思います!
    ありがとうございます!

    キャンセル

checkベストアンサー

+1

単純につなげた文字列を出したいのであれば、そもそも一度配列に取り出す必要は無いと思います。
最初から文字列として結合していって、最後にそれを.hereに入れれば良いと思います。
ついでに、改行を入れたいのであれば.hereをdivではなくpreタグにするか、
改行のかわりにbrを入れたうえで.textで入れるのではなく.htmlで入れる必要があります。

var data = "";
var tr = $("table tr");
for( var i=0,l=tr.length;i<l;i++ ){
  if(i>0) {
   data += "<br>";
  }
  var cells = tr.eq(i).children();
  for( var j=0,m=cells.length;j<m;j++ ){
   if(j>0){
    data += ",";
   }
   data += cells.eq(j).text();
 }
}
$(".here").html(data);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/03 15:18

    お早い回答、ありがとうございますm(_ _)m
    早速実行したところ、うまくいきました!

    >そもそも一度配列に取り出す必要は無いと思います。
    まさにおっしゃる通りです(^^;)
    教えていただいた内容で進めたいと思います。
    ありがとうございました!

    キャンセル

+1

こんにちは

いろんな方法があるんですねー

var tr = $("table tr");
    for( var i = 0 ; i < tr.length ; i++ ){
        var data = [];
        var cells = $(tr[i]).children("td");
        for( var j = 0 ; j < cells.length ; j++ ){
            if(typeof data[i] == "undefined")
                data[i] = [];
                data[i][j] = $(cells[j]).text();
        }
        //どっちか!!
        Display(data[i]);
        //Display2(data[i]);
    }
    function Display(e){
        $("table").after('<div class="here">' + e + '</div>');
    }
    function Display2(e){
        if(!$(".here").html().length){
            $(".here").html(e);
        }else{
            $(".here").html($(".here").text() + '<br />' + e);
        }        
    }

記述いただいたものを生かすとしたらこんな感じですかね?
あと、elementに両方入れないで別物なら別で要素に突っ込んであげたほうがいいきがするなー
いい感じにidふってあげるとかして。そのほうがなんか別の制御にも使いやすそう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/03 15:27

    記述したものを使ってくださりありがとうございますm(_ _)m
    すんなり理解できました!

    >あと、elementに両方入れないで別物なら別で要素に突っ込んであげたほうがいいきがするなー
    確かにそうですね。。
    その点も踏まえてもう一度自身で考えてみようと思います!

    キャンセル

0

今Liveweaveで実行してみたのですが、うまくいきました。
ちょっとやってみてください
http://liveweave.com/

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/03 15:17

    ありがとうございます!
    私が記載したコードでできた、ということなのでしょうか??

    Liveweave自体存じ上げなかったので、よいサイトを教えていただきました^^
    今後活用していこうと思います!

    キャンセル

  • 2016/06/03 15:22

    そうです。そのままでできました。
    それはよかったです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る