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

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

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

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Q&A

解決済

1回答

353閲覧

Bootstrap3のモーダルにJavascriptでCloseボタンを挿入したい

Manny

総合スコア54

JavaScript

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

0グッド

1クリップ

投稿2018/12/03 04:25

前提・実現したいこと

BootstrapのmodalsのCloseボタンをjavascriptで挿入したいです。
(標準ではHTMLに記述されているのですが、諸事情により、JSで挿入する形になっています)

今まではjQueryを使って書いていました。

jQuery

1$('.modal .modal-content').each(function() { 2 const strHtml = '<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true"></span><span class="sr-only">Close</span></button>'; 3 $(this).prepend(strHtml); 4});

ですが、勉強もかねてバニラJavascriptで書き直したのですが、うまく動きませんでした。

私が未熟+周りに聞ける人がいない環境なので、わかる方がいらっしゃいましたら御教授願います。
よろしくお願いします。

発生している問題・エラーメッセージ

モーダルが1つの場合は、問題なく動作するコードは書けました。
しかし、モーダルが複数ある場合がうまくいかず困っています。下記のようなエラーメッセージが出ます。

Uncaught TypeError: getModalContent.insertBefore is not a function

該当のソースコード

Javascript

1(function() { 2 const tgtModalWithClose = document.getElementsByClassName('modal'); 3 if (tgtModalWithClose.length) { 4 /** 5 * Closeボタン 生成 6 */ 7 const tempElemDiv = document.createElement('div'); 8 const strHtml = '<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true"></span><span class="sr-only">Close</span></button>'; 9 tempElemDiv.innerHTML = strHtml; 10 const modalCloseBtn = tempElemDiv.childNodes; 11 12 let getModalContent; 13 14 for(let i=0; i<tgtModalWithClose.length; i=(i+1)|0) { 15 getModalContent = tgtModalWithClose[i].getElementsByClassName('modal-content'); 16 getModalContent.insertBefore(modalCloseBtn[0], getModalContent.firstElementChild); 17 } 18 } 19})();

HTML

1<div class="modal with-close fade modal--01" id="modal--01"> 2 <div class="modal-dialog"> 3 <div class="modal-content"> 4 <div class="modal-header"> 5 <div class="modal-header--title">タイトル</div> 6 </div> 7 <div class="modal-body"> 8 <div class="row"> 9 <div class="col-md-12"> 10 <p>知りたいことのおおよそ半分はネットや本で調べればわかることだ<br> 11 どこにも載っていない「もう半分」を知るためには...<br> 12 自分で考え出すか 経験するしかない</p> 13 </div> 14 </div> 15 </div> 16 <div class="modal-footer"> 17 <div class="row"> 18 <div class="col-md-12"> 19 <button class="btn btn-default btn-block" data-dismiss="modal">ボタン</button> 20 </div> 21 </div> 22 </div> 23 </div> 24 </div> 25</div> 26 27<div class="modal with-close fade modal--02" id="modal--02"> 28 <div class="modal-dialog modal-lg"> 29 <div class="modal-content"> 30 <div class="modal-header"> 31 <div class="modal-header--title">タイトル</div> 32 </div> 33 <div class="modal-body"> 34 <div class="row"> 35 <div class="col-md-12"> 36 <p>知りたいことのおおよそ半分はネットや本で調べればわかることだ<br> 37 どこにも載っていない「もう半分」を知るためには...<br> 38 自分で考え出すか 経験するしかない</p> 39 </div> 40 </div> 41 </div> 42 <div class="modal-footer"> 43 <div class="row"> 44 <div class="col-md-12"> 45 <button class="btn btn-default btn-block" data-dismiss="modal">ボタン</button> 46 </div> 47 </div> 48 </div> 49 </div> 50 </div> 51</div> 52 53<div class="wrapper"> 54 <div class="container-fluid"> 55 <div class="section"> 56 <div class="row"> 57 <div class="col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4"> 58 <a class="btn btn-inverse-primary btn-block mbl" href="#fakelink" data-toggle="modal" data-target=".modal--01">モーダルを開く</a> 59 </div> 60 </div> 61 <div class="row"> 62 <div class="col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4"> 63 <a class="btn btn-inverse-primary btn-block mbl" href="#fakelink" data-toggle="modal" data-target=".modal--02">モーダルを開く</a> 64 </div> 65 </div> 66 </div> 67 </div> 68</div>

試したこと

こちらを参考に書いて見たのですがエラーは消えず。for文の中だとエラーが出ます。

補足情報(FW/ツールのバージョンなど)

  • Bootstrap version3.3.7
  • jQuery version 2.2.4

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

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

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

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

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

m.ts10806

2018/12/03 04:54

jQueryを3系にするとどうなりますか。
guest

回答1

0

ベストアンサー

勉強もかねてバニラJavascriptで書き直したのですが、うまく動きませんでした。

やめたほうがいいです。BootstrapのモーダルはjQueryで動かすのが前提ですので、バニラで書き直して動かそうとすれば、ただ面倒なだけです。

投稿2018/12/03 05:19

maisumakun

総合スコア145183

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

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

Manny

2018/12/03 05:31

回答ありがとうございます。 そうなんですね。違う題材を考えて勉強したいと思います。 貴重な時間をさいていただき、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問