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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

HTML

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

Q&A

解決済

4回答

1637閲覧

JS(ES5)、jQueryによるHTMLタグの連続的な判定の方法と、SPAにおけるページ読み込み時のjQueryの発火方法

Cya_IronBrain

総合スコア13

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

HTML

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

0グッド

0クリップ

投稿2020/04/13 09:33

編集2020/04/20 00:46

前提

初めて質問をさせていただきます、よろしくお願いいたします。
SPAのシステム保守を行っている者です。

言語はJavascript(ES5)、及びjQuery3.4.1を用いて、
下記HTMLの構造で値が空である行(<tr>)に対し「display: none」を付与しようと考えています。

最低限の要件としてIE10への対応が必要です。

該当コード

※テーブルレイアウトですが、これの可否については目を瞑って頂けると幸いです。

HTML

1<table id="oya"> 2 <tbody> 3 <tr> 4 <td class="row-title">行タイトル(残す行)</td> 5 <td class="row-value">value</td> 6 </tr> 7 <tr> 8 <td class="row-title">行タイトル(消す行)</td> 9 <td class="row-value"></td> 10 </tr> 11 <tr> 12 <td class="row-title">行タイトル(消す行)</td> 13 <td class="row-value"></td> 14 </tr> 15 <tr>...</tr> 16 <tr>...</tr> 17 <tr>...</tr> 18 <tr>...</tr> 19 </tbody> 20</table>

表示例

処理適用前

行名
名前佐藤 圭太
性別
番号0037301
出向予定
TOEICスコア

処理適用後例

行名
名前佐藤 圭太
番号0037301

具体的に分からないこと

質問事項は二つあります。

先ず発火条件ですが、「そのページを表示しきった直後」を想定しています。
しかしSPAである都合上「DOMContentLoaded」や「onClick」等は使用できない為、
「コード上でその処理に差し掛かった時」に発火させたいと考えていますが、
この方法だとid="oya"に対してthisから相対的に子要素などを指定できないのではないか、と詰まっています。

もう一方は、jsやjQueryを用いてid="oya"配下の<tr>の中身が空である、
もっと言えば<td class="row-value"></td>の中身が空の場合、
その親の<tr>にdisplay:none付与、という判定をするのはわかりますが、
それを各行それぞれに対して連続的に判定する方法が分からない、という状態にあります。

これらふたつのうち、どちらかについてでもご教示頂けると非常に有難いです。

補足情報

直接役に立たない情報かもしれませんが、FWはプロジェクト独自のものです。
それと、コロナの影響で出社が制限される都合で返信が遅くて来週以降となってしまうことをお詫び申し上げます。

追記1

> そもそもテーブル作る最中に除外すればいいだけでは?

当画面は「照会」モードと「更新」モードで使いまわされており、
テーブルを作る段階でタグを除外してしまうと片方のモードで正しく表示されないリスクが高いため、
display: none;による非表示を採用しようという結論に至った経緯があります。

そしてなるべくFWのコアな部分に手を入れることなく、
出来ればクライアント側で完結させたいという事情があります。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/04/15 22:38

そもそもテーブル作る最中に除外すればいいだけでは?
Cya_IronBrain

2020/04/20 03:02

当画面は「照会」モードと「更新」モードで使いまわされており、 テーブルを作る段階でタグを除外してしまうと片方のモードで正しく表示されないリスクが高いため、 display: none;による非表示を採用しようという結論に至った経緯があります。 そしてなるべくFWのコアな部分に手を入れることなく、 出来ればクライアント側で完結させたいという事情があります。 (このコメントについては追記させていただきました)
guest

回答4

0

先ず発火条件ですが、「そのページを表示しきった直後」を想定

SPA であれば、 HTML 内の #content など、「特定の wrapper が更新された後」となると思いますので、MutationObserver で変化を監視する方法もありそうですね。

追記)

最低限IE10への対応が必要

Stack Overflow Does IE10 support DOM4 Mutation Observers?
「No! IE11 から」らしいですので要件外ですね。


似たような方法に、Prototype.jsEvent.observe があります。

jQuery とのコンフリクトを回避するために、読み込み順があります。

投稿2020/04/15 21:53

編集2020/04/15 22:53
AkitoshiManabe

総合スコア5432

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

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

0

「コード上でその処理に差し掛かった時」に発火させたいと考えていますが、

ふつう、SPA側の仕組みにフックなりイベントなりが用意してあるものです(独自フレームワークでは詳細不明ですが)。

投稿2020/04/13 10:42

maisumakun

総合スコア145183

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

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

0

FWはプロジェクト独自のものです。

ページの移動くらい準備していそうな気がしますが、「よくわからんがとりあえず自分の書いたJavaScriptは実行できる」という状況であれば、無理やり動かすことができると思います。

js

1window.addEventListener( 'scroll', () => { 2 // 指定idの要素を探して消す作業をする 3 // 消したことを当該idの要素にクラスとかで追加しておいて、2回以上は行わない 4});

投稿2020/04/15 15:42

kei344

総合スコア69407

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

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

0

ベストアンサー

条件がいまいちわかりませんがこんな感じ?

javascript

1$(function(){ 2 $('#oya tbody tr').has($('td.row-value').filter(function(){ 3 return $(this).text()==""; 4 })).hide(); 5});

投稿2020/04/13 13:16

yambejp

総合スコア114829

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

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

Cya_IronBrain

2020/04/20 03:01

形は幾らか変えましたが、正に自分の知りたかったことに合致していたのでベストアンサーです!! 引数で無名関数を作ることが出来ることを失念していたため、同時に発火の問題も解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問