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

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

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

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

Q&A

解決済

2回答

1609閲覧

javascriptのsetAttributeでのリンク設定について

july2022

総合スコア10

JavaScript

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

0グッド

1クリップ

投稿2022/07/12 09:11

編集2022/07/12 18:35

javascriptのsetAttributeについて質問です。

JSONで情報取得したデータの中に「変更」と「削除」のボタン2つあります。

それぞれのbuttonに
javascriptのsetAttributeで“onclick=”と“ページ内リンク(モーダル表示)”を設定したいのですが、うまくいかず困っています。

[HTML] ———————————————————————

<span> <button class="change" id="changeID">変更</button> <button class="delete" id="deleteID">削除</button> </span>

————————————————————————————

[javascript] —————————————————————

body: function (ul, json) { $getJSON(json, function (data){ data.forEach(function(v) { var li, spans, buttons; li = document.createElement('li'); spans = makeSpans(v); spans.forEach(function (span) { li.appendChild(span); }); buttons = document.createElement('span'); Policy.const.button.forEach(function (val, i) { var button; button = document.createElement('button'); button.className = i === 0 ? 'change' : 'delete'; button.id = i === 0 ? 'changeID' : 'deleteID'; button.onclick = function (e) { i === 0 ? ChangeEvent(e) : deleteEvent(e) ; }; // button.setAttribute('onclick', 'location.href="#modal-chg01"'); // button.setAttribute('onclick', 'location.href="#modal-del01"'); button.textContent = val; buttons.appendChild(button); }); const button = li.appendChild(buttons); ul.appendChild(li); }); }); }

————————————————————————————

[HTML結果] —————————————————————

<span> <button class="change" id="changeID" onclick='location.href="#modal-del01"'>変更</button> <button class="delete" id="deleteID" onclick='location.href="#modal-del01"'>削除</button> <span>

————————————————————————————

当たり前なのですがこの記述では、リンク先がどちらも#modal-del01” になってしまいます。

setAttributeで別々のリンク先設定にしたい場合どのように記述すればよいですか?

初心者ですので、わかりやすくご教示いただけますと、助かります。
よろしくお願いします。

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

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

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

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

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

maisumakun

2022/07/12 09:12

buttonはどのように取得しているのですか?
yambejp

2022/07/12 09:15 編集

> JSONで情報取得したデータの中に「変更」と「削除」のボタン2つ どうやってjsonを取得してHTMLにしているかによります 全角でかいているクォーテーションはNGです
退会済みユーザー

退会済みユーザー

2022/07/12 09:22 編集

ダブルクォーテーションの文字が全角文字だけど、だいじょうぶ? “”じゃなく""の方を使いますよ。
july2022

2022/07/12 09:40

すみません。 どうやってjsonを取得してHTMLにしているか、というのは、どういうことですか? どういった情報があればよいのでしょうか。 全角のダブルクォーテーションのご指摘、ありがとうございます。 メモに記述してしまったので、こんなことになってます。(元のデータは大丈夫です) 投稿の方、恥ずかしいので修正したいと思います。
退会済みユーザー

退会済みユーザー

2022/07/12 09:45

button.setAttribute() のbuttonが同じものに対して重ねるように実行している? 実態のコードじゃなく手書きのメモの転記だと間違いやすいので、落ち着いて質問文を修正できる環境になってから直してください。中略としてすっ飛ばした箇所に問題があるかもしれないし。
yambejp

2022/07/12 09:55

> どうやってjsonを取得してHTMLにしているか、というのは、どういうことですか? jsonというからには外部ファイルですよね? 外部のファイルはなんらかの手続きを経て取り込まれます? 具体的に何をどうしているのかさっぱりわかりません
yambejp

2022/07/12 11:07 編集

結局JSONデータは ["変更","削除"] なのでしょうか?
july2022

2022/07/12 12:12

json: { sample: './data/sample.json'}, button: ['変更', '削除'], です。
yambejp

2022/07/13 00:18

> button: ['変更', '削除'], はJSONとしては評価できません。
july2022

2022/07/13 02:15

いろいろとご考慮いただきまして、ありがとうございます。 JSONとしては評価できないことなんですね。この点も考え直さなければいけないということですね。すると工数も考えないといけませんね。 2つのボタンは上記のソースで表示はされているので、あとはモーダル表示のページ内リンクの設定をjsで個別に付与したかっただけなのですが...。 buttonタグそのものには設定できるのですが、idやclassで個別設定分けしようとするとできない。 調べても2つのボタンにsetAttributeで設定分けする方法が見つからないため、こちらで質問させていただきました。 要再検討事案ということが分かりました。 いろいろとご苦心いただきまして、ありがとうございました。
guest

回答2

0

//sample.json

JSON

1"<span>\n<button class=\"change\" id=\"changeID\">変更</button>\n<button class=\"delete\" id=\"deleteID\">削除</button>\n</span>"

これをjsでよんでbottunにonclickを設定

javascript

1fetch("sample.json").then(res=>res.json()).then(data=>{ 2 const tmp=document.createElement('template'); 3 tmp.insertAdjacentHTML("beforeend",data); 4 tmp.querySelectorAll('button')[0].setAttribute("onclick",`location.href="#modal-chg01"`); 5 tmp.querySelectorAll('button')[1].setAttribute("onclick",`location.href="#modal-del01"`); 6 console.log(tmp.firstChild.outerHTML); 7});

調整

//sample.json

json

1{"button":["変更","削除"]}

javascript

1<script> 2window.addEventListener('DOMContentLoaded',async()=>{ 3 const data=await fetch('sample.json').then(res=>res.json()).then(x=>x.button); 4 const ul=document.querySelector('ul'); 5 const li=document.createElement('li'); 6 const buttons = document.createElement('span'); 7 const attrs=[ 8 {className:'btn btn-warning change',id:'changeID',onclick:()=>location.hash="modal-chg01"}, 9 {className:'btn btn-info delete' ,id:'deleteID',onclick:()=>location.hash="modal-del01"}, 10 ]; 11 data.forEach((x,y)=>{ 12 const opt={...attrs[y],textContent:x}; 13 const button = Object.assign(document.createElement('button'),opt); 14 buttons.appendChild(button); 15 }); 16 li.appendChild(buttons); 17 ul.appendChild(li); 18}); 19</script> 20<ul></ul>

投稿2022/07/12 10:08

編集2022/07/13 00:22
yambejp

総合スコア114843

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

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

july2022

2022/07/13 02:15

いろいろとご考慮いただきまして、ありがとうございます。感謝いたします。
guest

0

自己解決

button: ['変更', '削除'],

はJSONとしては評価できないことのようです。
といっても、2つのボタンは上記のソースで表示はされているので、あとはモーダル表示のページ内リンクの設定をjsで個別に付与したいだけだったのですが、簡単にはいかないようですので、どうするか再度検討したいと思います。
質問について、いろいろとご考慮の上、お答えいただきまして、ありがとうございました。

投稿2022/07/13 02:22

july2022

総合スコア10

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

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

yambejp

2022/07/13 02:38

ご自身が「JSON」と指定したのですから、ちゃんとしたJSONデータであることを検証してから命題に提示ください。基本がまちがっているとその後の処理がまったく無意味です。 すくなくとも「上記のソースで表示はされている」というのは間違いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問