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

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

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

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

Q&A

解決済

2回答

598閲覧

特定の条件のときに要素を削除したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2020/06/12 06:09

編集2020/06/16 07:03

下記jsのように、PC時には.playVideoを埋め込み、スマホ時には削除するというやり方をしたいです。

この記述ですと検証ツールでスマホ時・PC時の表示を繰り返すたびに.playVideoがどんどん増えるだけで、スマホ時に削除されませんでした。
どなたか方法がわかる方、ご教授いただけますと幸いです。
よろしくお願いいたします。

javascript

1const mqs = window.matchMedia('(min-width: 991px)'); 2mqs.addListener(changeMediaQuery); 3function changeMediaQuery(mqs){ 4 if (mqs.matches === true) { 5 let element = document.getElementById('video'); 6 element.insertAdjacentHTML('afterbegin', '<source src="img/mv.mp4" class="playVideo">'); 7 } else { 8 document.getElementsByClassName('playVideo').remove(); 9 } 10}

html

1<video id="video" autoplay muted loop> 2 <source src="img/mv.mp4" class="playVideo"> 3</video>

追記(2020/06/16)

ご回答いただきありがとうございます!
現在他の修正で後押ししてしまっている為、終わり次第いただいたコードで試させていただきBAを決定させていただきます。遅くなってしまい申し訳ございません。

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

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

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

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

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

guest

回答2

0

js

1// 少なくともこう。複数要素があるならforEachとかを使用する。 2document.getElementsByClassName('playVideo')[0].remove();

【Document.getElementsByClassName() - Web API | MDN】
https://developer.mozilla.org/ja/docs/Web/API/Document/getElementsByClassName

投稿2020/06/12 07:02

kei344

総合スコア69606

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

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

miyabi_takatsuk

2020/06/12 11:39

質問のコード、 HTMLCollectionに対してremoveメソッド使ってたんですね・・・。 見落としてました 汗
退会済みユーザー

退会済みユーザー

2020/06/18 09:06

ご回答いただきありがとうございます! ClassNameですとそのように書いてあげなくては動かないのですね。勉強不足でした。
guest

0

ベストアンサー

JavaScriptでの処理なら、
ユーザーエージェントで条件分岐を行うのが、一番有効な処理分けの方法と思われます。
なぜなら、スマホデバイスの解像度はかなり高くなっており、PCとの振り分けが不十分になりがちだからです。

下記が例になります。

javascript

1const spDevices = [ 2 'iphone', 3 'ipod', 4 'android' 5]; 6const ua = navigator.userAgent.toLowerCase(); 7const spFlg = spDevices.some(v => 8 ua.includes(v) && (v == 'android' ? ua.includes('mobile') : true) 9); 10// スマホデバイスならば、spFlgはtrueになる 11 12// IEでやるなら下記 13const spFlg = spDevices.some(function(v) { 14 return ua.indexOf(v) != -1 && (v == 'android' ? ua.indexOf('mobile') != -1 : true) 15});

また、今のコードでは、要素の削除はできません。
(jQueryのような書き方が通じない部分)
ので、下記のようにします。

javascript

1document.getElementsByClassName('playVideo').forEach(el => el.remove()); 2 3// IEでやるなら下記 4[].forEach.call(document.getElementsByClassName('playVideo'), function(el) { 5 el.parentNode.removeChild(el); 6});

IEに直すとけっこう使えない関数多いので、注意が必要です。

投稿2020/06/12 06:55

編集2020/06/22 04:41
miyabi_takatsuk

総合スコア9555

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

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

退会済みユーザー

退会済みユーザー

2020/06/18 09:05

こちらのユーザーエージェントでの出し分けができる書き方で書いたら上手く行きました! スマホ時(実機時)に動画を読み込ませたくなかったのです... ありがとうございます!
退会済みユーザー

退会済みユーザー

2020/06/22 04:02

すみません、userAgentの構文がIEですとエラーとなってしまい、IEでplayVideoが再生されなくなってしまいました。 調べてみたところおそらくIEに対応していない構文なのではないかと思いました。 IEに対応した書き方をご存知の場合、ご教示いただけますと幸いです。
miyabi_takatsuk

2020/06/22 04:08 編集

あ、なるほど。 せっかくなので、自身で調べてみてはいかがでしょうか? IE対応の分 IEに関しては、質問文に記載無いので、要件外になりますので・・・。 (これ以上の対応は作業依頼になる) ヒントはアロー関数使ってるところです。
miyabi_takatsuk

2020/06/22 04:24

調べてもどうしてもわからない時はコメントください。
退会済みユーザー

退会済みユーザー

2020/06/22 04:32

ヒントを出してくださりありがとうございます。 const spFlg = spDevices.some(function(v){ ua.includes(v) && (v == 'android' ? ua.includes('mobile') : true) }); という書き方をしたのですが、動きませんでした... よろしければ改めて質問を投稿いたしますので、そちらでご教授いただけないでしょうか。
miyabi_takatsuk

2020/06/22 04:33

いえ、この質問トピックでいっちゃいましょう。 わかりました、IEのバージョンはなんでしょうか? 10以下だと、someさえも使えない可能性ありますので。
miyabi_takatsuk

2020/06/22 04:54 編集

kei344さん > ありがとうございます。 あとは、要素.remove()や、HTMLCollection.forEachも、IEではできないっぽいですね。 いや、IE11なら、HTMLCollection.forEachできるかも・・・。
退会済みユーザー

退会済みユーザー

2020/06/22 04:50

miyabi_takatsukさん> ご回答の編集していただきありがとうございます!おかげさまでIEでも問題なく動くようになりました... こんなにご親切にしていただき恐れ多いです。本当にありがとうございます。 もっとjsの勉強に励みます。 kei344さん> リンクのご共有いただきありがとうございます!勉強になりました。 include()もIEでは非対応だったのですね...。
miyabi_takatsuk

2020/06/22 04:53

いえいえ。 IE対応って、様々な面で面倒が発生し、 仕事としては、対応で別途料金をいただくくらい、大変なものだったりします。 今の時代では、多くの案件では対応自体切っていたりします。 なので、次質問される時は、 IEの対応も行なっていきたい旨も記載することをお勧めしますよ。
退会済みユーザー

退会済みユーザー

2020/06/22 04:58

今までフロントエンド経験があまり無くhtml/cssまでの作業だったので、 jsでのIE対応もこれほど大変なものだとは思いませんでした... 今回の件でとても勉強になりました。 今後はIE対応のお願いも含め質問させていただきます。 本当にありがとうございました...!m(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問