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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

530閲覧

print機能、innerHTMLをつけるのか?つけないのか?

NagaMind

総合スコア15

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2018/10/19 04:09

編集2018/10/19 10:38

前提・実現したいこと

投稿を印刷させる際に、フレームを選択(ここはモーダルでradioを使って取得しています)、記事を抜き取り、適切に配置し、それを印刷させる機能を作っています。
一部、テーブルから特定部分の文字を抜き出す処理が必要で、文字を抜き出すことはできました。

そして、ここからが質問内容になるのですが、
投稿によっては文字列を取得するテーブルが生成されず、その際はテーブルから抜き出すはずだった文字列が表示される部分に何も表示させないようにしようとしています。しかし、下のcodeの状態ではテーブルがある時に文字を表示することができます。
しかし、テーブルがない時にundefindを表示してしまいます。

HTMLは投稿された投稿を自動的に生成しているため、ソースはありません。
投稿の表示形式としては以下のような形になります。
APIで自動生成されてるため、この中にidなどを降ることはできないため、その上にIDをつけ、以下のような抜き出し方をしています。

HTML

1<h4> 2 <p> 3 <table> 4 <tr> 5 <td></td> 6 <td></td> 7 <td></td> 8 </tr> 9 </table> 10 </p> 11 <p>hogehoge</p> 12 <p>hugahuga</p> 13 <p>foofoo</p> 14 <p>...</p> 15 <p>..</p> 16</h4> 17

初心者なのでどんなcodeが良いcodeなのかもわかりません!もしよければその辺りも教えていただけると幸いです!

該当のソースコード

jquery

1$(function() { 2 $('.sample').on('click', function () { 3 var date = $('table td')[1]; //テーブル内の文字列取得 4 var name = $('table td')[3]; 5 var type = $('table td')[5]; 6 var size = $('table td')[7]; 7 var place = $('table td')[9]; 8 var how = $('table td')[11]; 9 var comment = $('h4 p').slice(1,-1).text(); 10 var areatext = document.getElementById("content"); //投稿内の文字列と 11 var areaimage = document.getElementById('image');   //画像の取得 12 var htmldoc = document.body.innerHTML; 13 14 date = date || ""; //undefinedを表示させない処理 15 name = name || ""; 16 type = type || ""; 17 size = size || ""; 18 place = place || ""; 19 how = how || ""; 20 21 $('button').click(function () { //選択されたフレームの取得部分 22 var radio = $('input[name="radio"]:checked').val(); 23 if (radio === 'frameone') { 24 frm = '<%= image_tag "red.png", style:"width: 100%;" %>'; 25 } else if (radio === 'frametwo') { 26 frm = '<%= image_tag "blue.png", style:"width: 100%;"%>'; 27 } else if (radio === 'framethree') { 28 frm = '<%= image_tag "green.png", style:"width: 100%;"%>'; 29 } else if (radio === 'framefour') { 30 frm = '<%= image_tag "orange.png", style:"width: 100%;"%>'; 31 } else if (radio === 'framefive') { 32 frm = '<%= image_tag "pink.png", style:"width: 100%;"%>'; 33 }; 34 35 window.document.body.innerHTML = //個々で印刷時のパーツ配置を作成 36 "<div class='frm'>" + frm + 37 "<div class='area'>" + areatext.innerHTML + 38 "<div class='img'>" + areaimage.innerHTML + "</div>" + 39 "<div class='top'>" + name.innerHTML + "</div>" + //ここから 40 "<div class='cell'>" + date.innerHTML + "</div>" +  41 "<div class='cell'>" + type.innerHTML + "</div>" + 42 "<div class='cell'>" + size.innerHTML + "</div>" + 43 "<div class='cell'>" + place.innerHTML + "</div>" + 44 "<div class='cell'>" + how.innerHTML + "</div>" + //この部分が問題 45 "<div class='comment'>" + comment + "</div></div></div>"; 46 window.print(); 47 document.body.innerHTML = htmldoc; 48 location.reload(); 49 }); 50 }); 51}); 52

試したこと

いろいろトライアンドエラーしてみたところ、

    "<div class='top'>" + name + "</div>" + //ここから "<div class='cell'>" + date + "</div>" +  "<div class='cell'>" + type + "</div>" + "<div class='cell'>" + size + "</div>" + "<div class='cell'>" + place + "</div>" + "<div class='cell'>" + how + "</div>" + //この部分が問題

このように書き換えると、テーブルが無いときは正常に非表示にできました。
しかし、これでテーブルがある場合に試すと、取得したテーブルの値が正常に表示できませんでした。
[object HTMLTableCellElement]
が表示されるだけでした。

どなたか、アドバイスをよろしくおねがいします!

補足情報

jquery 1.12.4
Rails 5.1.4
Ruby 2.4.2

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2018/10/19 10:29

HTMLからぬくんですよね?肝心のHTMLのソースはあるんでしょうか?
NagaMind

2018/10/19 10:32

すみません。HTMLはAPIで自動生成されるため、HTMLのソースはありません。記載漏れになっていました!ご指摘ありがとうございます!編集します!
guest

回答2

0

自己解決

あまり良い書き方ではありませんが、

(name.innerHTML === undefined ? "" : name.innerHTML)

と記述することで思っていた動きを実現することができました!

投稿2018/10/20 01:24

NagaMind

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

試してませんが
date = date.innerHTML || "";
のような形にすればいいのでは?

投稿2018/10/19 11:04

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NagaMind

2018/10/20 01:00

ありがとうございます! 試してみましたが、やはりうまくいきませんでした。動作としては ``` "<div class='cell'>" + date + "</div>" +  ``` と書いたときと同じでした!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問