• 締切済み

replace() メソッドで表を作れますか?

HTMLの表(テーブル)は、 通常、table, th, td などのタグを用いて作成します。 私は、それに飽きてしまったので、それらのタグを使わずに replace() メソッドで表を作ることができました。 【HTML】 <pre class="table"> No. ARTIST SONG TITLE RELEASE 01 Ava Max Salt 2019 02 Sia Move Your Body 2016 03 Ken Laszlo Hey Hey Guy 1984 04 The Weeknd Save Your Tears 2020 05 Suri Media Thuong Ly Biet 2021 06 Charlie Thompson Changed My Mind 2013 </pre> 皆さんでしたら、どんなコーディングで実現できますか? 【条件】 ・元データのセル間はタブ区切り ・createElement()を用いないこと ・メソッドチェーンは可読性が劣るので不可  ・CSSは用いずに、文字の太さ・セルの背景色も JavaScriptで設定

みんなの回答

回答No.3

そもそも論として <style> table tr:first-of-type { background: #ddc; } </style> で、いいだろうよ html, css で補えないときに script の出番であって 提示していることは意味のない”縛り”である コードを書く上でそのコードには意味を持たせて作るべきだ replace は「置き換える」の意味であり、「表を作る」には不適当だ 作者が求めるコードを作り、意図した通りに動いているならば それ以上弄る必要はない 先進的なコードではなく、後進的な”縛り”のあるプログラムを書いて 「動いたけど・・・」と自慢されても興味がない。

retorofan
質問者

お礼

私のこの質問の趣旨は、こういうことです。 「JavaScriptで」「暇なときにでも」 興味を持たれたら応じていただけますか? あくまでも、JavaScriptのコード一択で、 「もし、貴方ならどうしますか?」 と尋ねているのですから、 「CSS別途でいいじゃないか」は どういうものなんでしょうかね。 もし、興味を持たれたら、ご参加を! ・JavaScriptで、 ・forループを用いずに、 ・replaceメソッドで表をコーディング

回答No.2

>メソッドチェーンは可読性が劣る 使わずにできるの? innerHTML を使う時点で文字列の連結作業となります。 それで可読性?www 理解しようという気が無いだけでは? <!DOCTYPE html> <meta charset="UTF-8"> <title></title> <body> <pre class="table"> No. ARTIST SONG TITLE RELEASE 01 Ava Max Salt 2019 02 Sia Move Your Body 2016 03 Ken Laszlo Hey Hey Guy 1984 04 The Weeknd Save Your Tears 2020 05 Suri Media Thuong Ly Biet 2021 06 Charlie Thompson Changed My Mind 2013 </pre> <script> document.body.innerHTML='<table border="1">'+ document.querySelector('pre.table').textContent.trim().replace (/^|\n/g,'<tr><td>').replace(/\t/g,'<td>'); document.querySelectorAll('tr:first-of-type td').forEach (e=>e.style.cssText ='color:red; font-size:large; background:#ddc'); </script>

retorofan
質問者

お礼

ご回答ありがとうございます。 前の方のコメントに、書きました。 >・ループ処理 そうしたデータ加工の方法もできますが、 私は、それらを用いずに成しえました。 貴殿でしたら、 forEachメソッドを用いなくてもできるのでは?

retorofan
質問者

補足

質問の一部を訂正させていただきます。 【条件】の箇所 × ・メソッドチェーンは可読性が劣るので不可 ○・メソッドチェーンは可読性が勝るが不使用 以上、よろしくお願いいたします。

回答No.1

条件から考えると、JavaScriptで preタグのinnerHTMLプロパティーから取り出した文字列データを 改行区切りやタブ区切りで分解させた配列に入れて、 それをループ処理でtable tr th td構成のテキストデータを作って preタグのinnerHTMLをreplaceでそれと入れ替えるってことなんでしょうね。 ただ、実用性で考えると、 HTMLファイルにあらかじめテキストデータ埋め込んでおいて それをブラウザ上のJavaScriptでHTMLタグに組み替え直すという方法をとるよりも サーバー側のプログラムで、テキストファイルなりデータベースから取り出したデータをHTML化してブラウザに送り出したほうが ブラウザのJavaScriptがOFF状態でも表示されますし ブラウザによるJavaScriptの挙動の違いも考える必要もないし なにより、事前にHTMLファイルにデータを埋め込んでおく必要もないので そのほうが 効率的なんじゃないかなとは思います。

retorofan
質問者

お礼

ご回答ありがとうございます。 拝見させていただきました。 ・配列 ・ループ処理 そうしたデータ加工の方法もできますが、 私は、それらを用いずに成しえました。 >サーバー側のプログラムで、・・・・ それだと 「replace() メソッドを用いて作表」 というテーマに沿わないことになりますので 論外、ということになりますね。

関連するQ&A

専門家に質問してみよう