質問の内容を少し修正しました。
実現したいこと
親ファイルのボタンをクリックすると、iframeのファイル内の<details>が開閉するようにしたいです。
(ローカル環境で、jQueryを使わずに実現したい。)
javascriptは初心者です。よろしくお願いいたします。
困っていること
下記ソースのように、一つのファイルだと正常に動作するのですが、
ファイルを分割する(iframe)と、ボタンをクリックしても<details>が開閉しません。
イメージ
一つのファイルだと正常に動作する
iframeを使うと、ボタンをクリックしても開閉しない
ソースコード(一つのファイルだと正常に動作する。<その1>)
html
1<html> 2<body> 3 4<button type="button">全てのメニューを開く</button> 5<button type="button">全てのメニューを閉じる</button> 6 7<details> 8<summary>メニュー1</summary> 9<ul> 10<li>りんご</li> 11<li>みかん</li> 12</ul> 13</details> 14 15<details> 16<summary>メニュー2</summary> 17<ul> 18<li>いか1</li> 19<li>たこ</li> 20</ul> 21</details> 22 23<script type="text/javascript"> 24 25var buttons = document.querySelectorAll('button'); 26 27buttons[0].addEventListener('click', function(event) { 28 var details = document.querySelectorAll('details'); 29 for (var i = 0; i < details.length; i++) { 30 details[i].setAttribute('open', 'open'); 31 } 32}, false); 33 34buttons[1].addEventListener('click', function(event) { 35 var details = document.querySelectorAll('details'); 36 for (var i = 0; i < details.length; i++) { 37 details[i].removeAttribute('open'); 38 } 39}, false); 40 41 42var target = details[i]; 43if (target.hasAttribute('open')) {target.removeAttribute('open');} 44else {target.setAttribute('open', 'open');} 45 46</script> 47 48</body></html>
ソースコード(一つのファイルだと正常に動作する。<その2>)
※教えて頂いたscript使ってます(感謝)
html
1<html> 2<body> 3 4<button type="button" onclick="details_open(true)">全てのメニューを開く</button> 5<button type="button" onclick="details_open(false)">全てのメニューを閉じる</button> 6 7<details> 8<summary>メニュー1</summary> 9<ul> 10<li>りんご</li> 11<li>みかん</li> 12</ul> 13</details> 14 15<details> 16<summary>メニュー2</summary> 17<ul> 18<li>いか1</li> 19<li>たこ</li> 20</ul> 21</details> 22 23<script type="text/javascript"> 24 25 const details_open = (flg) =>{ const dtls = document.querySelectorAll('details'); 26 dtls.forEach(x=>x.open=flg); 27} 28 29</script> 30</body></html>
iframeを使うと、ボタンをクリックしても開閉しない。
親のHTML
html
1<!DOCTYPE html> 2<html> 3<head> 4</head> 5<body> 6<button type="button" onclick="details_open(true)">iframe内の全てのメニュ-を開く</button> 7<button type="button" onclick="details_open(false)">iframe内の全てのメニュ-を閉じる</button> 8<br> 9<iframe src="sub_fm.html" id="id_ifrem" title="sub-ifrm"></iframe> 10 11<script type="text/javascript"> 12 const details_open = (flg) =>{ const dtls = document.querySelector('#id_ifrem').contentWindow.document.querySelectorAll('details'); 13 dtls.forEach(x=>x.open=flg); 14} 15</script> 16</body> 17<html>
子(iframeの中)のHTML
html
1<!DOCTYPE html> 2<html> 3<head> 4 <title>sub-ifrm</title> 5</head> 6 7<body> 8<details> 9<summary>メニュー1</summary> 10<ul> 11<li>みかん</li> 12<li>いちご</li> 13</ul> 14</details> 15 16<details> 17<summary>メニュー2</summary> 18<ul> 19<li>いか</li> 20<li>たこ</li> 21</ul> 22</details> 23</body> 24</html>