前提・実現したいこと
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
回答1件
あなたの回答
tips
プレビュー