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

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

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

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

Q&A

解決済

1回答

1500閲覧

JavaScriptでリンクを設定する方法について教えてください

ryuji0205

総合スコア15

JavaScript

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

0グッド

0クリップ

投稿2018/05/01 10:18

編集2018/05/01 11:11
<script type="text/javascript"> window.onload = function(){ var linkID = "contact_form"; // リンクを設定するタグのID var linkURL = "contact.html"; var baseTag = document.getElementById(linkID); var link1 = baseTag.firstChild.nodeValue; var aTag = document.createElement("a"); aTag.href = linkURL; aTag.appendChild(document.createTextNode(link1)); baseTag.replaceChild(aTag, baseTag.firstChild); } </script> --------------------- <li id="contact_form"> お問い合わせはコチラ </li>

上記のようなコードでliをクリックした時に contact.htmlへ遷移するように設定したのですが、複数リンクを設定するのにjavascriptは どのように書けばよろしいでしょうか?

完成形は下のようなHTMLコードです。

<div id="top-nav"> <ul> <li id="contact_form1">お問い合わせ1</li> <li id="contact_form2">お問い合わせ2</li> <li id="contact_form3">お問い合わせ3</li> <li id="contact_form4">お問い合わせ4</li> <li id="contact_form5">お問い合わせ5</li> <li id="contact_form6">お問い合わせ6</li> </ul> </div>

すいません、私の説明足らずでしたので追記させていただきます↓
liのリンクはそれぞれ別の飛び先になります。

私がサンプルで書いた内容ですと
●「contact_form」と言うIDがついてるものは「contact.html」へリンク
ですが、↑の設定を活かしたままで
●『contact_form2』のIDがついたliをクリックした時『contact2.html』へリンクする
と言うリンク設定を増やしていきたい場合にはどうすればよいでしょうか?


さらに追記しました

<script type="text/javascript"> window.onload = function(){ var linkID = "contact_form"; // リンクを設定するタグのID var linkURL = "contact.html"; var baseTag = document.getElementById(linkID); var link1 = baseTag.firstChild.nodeValue; var aTag = document.createElement("a"); aTag.href = linkURL; aTag.appendChild(document.createTextNode(link1)); baseTag.replaceChild(aTag, baseTag.firstChild); } </script> <div id="top-nav" class=""> <ul id="fixed-nav"> <li id="contact_form">お問い合わせはコチラ</li> <li id="privacypolicy">プライバシーポリシー</li> </ul> </div>

何度もすいません、あくまでサンプル用だったのでリンク先の名前などアテで行ってましたが、かえって混乱させてしまい申し訳ありません。。
上記が正規コードです、このコードでプライバシーポリシーのリンク設定をどのようにすればいいかご教授お願い致します。飛び先は「privacypolicy.html」にする予定です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

  • top-nav内のliを拾う
  • idがcontact_formxxx(xxxは数値)のものを拾う
  • 「contact_form」classを付けてそれを拾う

のどれかになるでしょう

追記

とりあえず,top-navのliをひろってみます

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 [].forEach.call(document.querySelectorAll('#top-nav li'),function(x){ 4 var linkURL = "contact.html"; 5 var link1 = x.textContent; 6 var aTag = document.createElement("a"); 7 aTag.setAttribute("href",linkURL) 8 aTag.appendChild(document.createTextNode(link1)); 9 x.textContent=""; 10 x.appendChild(aTag); 11 }); 12}); 13</script> 14<div id="top-nav"> 15<ul> 16<li id="contact_form1">お問い合わせ1</li> 17<li id="contact_form2">お問い合わせ2</li> 18<li id="contact_form3">お問い合わせ3</li> 19<li id="contact_form4">お問い合わせ4</li> 20<li id="contact_form5">お問い合わせ5</li> 21<li id="contact_form6">お問い合わせ6</li> 22</ul> 23</div>

修正

idのcontact_form以降の数値を利用してconctactxxx.htmlにリンクを張ればいいのですね?

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 [].forEach.call(document.querySelectorAll('#top-nav li'),function(x){ 4 var linkBasename = "contact"; 5 var linkExtension = ".html"; 6 var link1 = x.textContent; 7 if(r=x.getAttribute('id').match(/^contact_form(.+)$/)){ 8 var aTag = document.createElement("a"); 9 aTag.setAttribute("href",linkBasename+r[1]+linkExtension) 10 aTag.appendChild(document.createTextNode(link1)); 11 x.textContent=""; 12 x.appendChild(aTag); 13 }; 14 }); 15}); 16</script> 17<div id="top-nav"> 18<ul> 19<li id="contact_form1">お問い合わせ1</li> 20<li id="contact_form2">お問い合わせ2</li> 21<li id="contact_form3">お問い合わせ3</li> 22<li id="contact_form4">お問い合わせ4</li> 23<li id="contact_form5">お問い合わせ5</li> 24<li id="contact_form6">お問い合わせ6</li> 25<li id="contact_form100">お問い合わせ100</li> 26</ul> 27</div>

法則性がない

法則性がないなら、リストを羅列するしか無いですね

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 [].forEach.call(document.querySelectorAll('#top-nav li'),function(x){ 4 var links ={ 5 "contact_form":"contact.html", 6 "privacypolicy":"privacypolicy.html", 7 }; 8 var id=x.getAttribute("id"); 9 var reg=new RegExp("^"+Object.keys(links).join("|")+"$"); 10 if(id.match(reg)){ 11 var link1 = x.textContent; 12 var aTag = document.createElement("a"); 13 aTag.setAttribute("href",links[id]); 14 aTag.appendChild(document.createTextNode(link1)); 15 x.textContent=""; 16 x.appendChild(aTag); 17 } 18 }); 19}); 20</script> 21<div id="top-nav"> 22<ul id="fixed-nav"> 23<li id="contact_form">お問い合わせはコチラ</li> 24<li id="privacypolicy">プライバシーポリシー</li> 25<li id="test">テスト</li> 26</ul> 27</div>

ローレベル処理

念の為もっとローレベルな処理を書いておきます
これならIEの相当古いバージョンでも動作します

javascript

1<script> 2window.onload= function(){ 3 var obj=document.getElementById('top-nav').getElementsByTagName('li'); 4 for(var i=0;i<obj.length;i++){ 5 var x=obj[i]; 6 var links ={ 7 "contact_form":"contact.html", 8 "privacypolicy":"privacypolicy.html" 9 }; 10 var id=x.getAttribute("id"); 11 var str=""; 12 for(var j in links){ 13 if(str!=="") str+="|"; 14 str+=j; 15 } 16 var reg=new RegExp("^"+str+"$"); 17 if(id.match(reg)){ 18 var link1 = x.innerHTML; 19 var aTag = document.createElement("a"); 20 aTag.setAttribute("href",links[id]); 21 aTag.appendChild(document.createTextNode(link1)); 22 x.innerHTML=""; 23 x.appendChild(aTag); 24 } 25 }; 26}; 27</script> 28<div id="top-nav"> 29<ul id="fixed-nav"> 30<li id="contact_form">お問い合わせはコチラ</li> 31<li id="privacypolicy">プライバシーポリシー</li> 32<li id="test">テスト</li> 33</ul> 34</div>

投稿2018/05/01 10:25

編集2018/05/01 12:12
yambejp

総合スコア114779

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

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

ryuji0205

2018/05/01 10:29

申し訳ありません、javascriptの事があまりわかっていないので 具体的にどのようなコードを書けば良いか教えて頂けますでしょうか?
yambejp

2018/05/01 10:41

一例あげておきます。他の方法で実現したい場合はどうしたいか指示下さい
ryuji0205

2018/05/01 10:54

コードありがとうございます。 申し訳ありません、私の説明不足でした、詳細を追記させていただきます。 すいません、私の説明足らずでしたので追記させていただきます↓ liのリンクはそれぞれ別の飛び先になります。 私がサンプルで書いた内容ですと ●「contact_form」と言うIDがついてるものは「contact.html」へリンク ですが、↑の設定を活かしたままで ●『contact_form2』のIDがついたliをクリックした時『contact2.html』へリンクする と言うリンク設定を増やしていきたい場合にはどうすればよいでしょうか?
yambejp

2018/05/01 11:01

修正しました。意図と違うようなら再度ご指摘下さい
ryuji0205

2018/05/01 11:12

何度も何度ももうしわけありません、再度詳細を追記させて頂きましたのでご確認をお願い致します。
yambejp

2018/05/01 11:18

contact_formはcontact.htmlでprivacypolicyがprivacypolicy.htmlだと 法則性が薄いですが もしほかにxxx_formがあればxxx.htmlになり、それ以外は idに.htmlをつければよいのでしょうか?
ryuji0205

2018/05/01 11:23

法則性が薄いのは重々承知です...既存サイトの仕様変更を急にふられてしまったのであまりいじれないの現状です(泣) 現状、上記の2項目(コンタクトとプラポリ)のみで追加はなさそうです!
yambejp

2018/05/01 11:35

法則性がないものを仕様を明確にせず処理させるのは無理があります。 一応リストを羅列する方法を提示しておきます
ryuji0205

2018/05/01 11:48

ソースのご共有ありがとうございます、やはり法則性などが必要なのですね.. さっそく教えて頂いたソースを反映したのですが、こちらのソースですとリンクの反応がありませんでした..
yambejp

2018/05/01 11:52 編集

WinならIE9以上、Firefox、chromeで動作確認はしてあります。 (全文をそのままコピペして試して下さい) 動かない場合は具体的なOSとブラウザの種類、バージョンなど 提示したほうがよいでしょう
ryuji0205

2018/05/01 12:38

こちらはwindows10 Firefox 59.0.2 (64 ビット)と表示されております。 すべてコピペしたのですが...
yambejp

2018/05/01 12:51

例えば「法則性がない」セクションに提示したソース <script>から</div>までコピペで適当な名前でhtmlを保存するだけですよ F12をおして開発画面をみたときコンソールにエラーは表示されますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問