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

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

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

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

Q&A

解決済

2回答

7473閲覧

javascriptで入力した文字にリンクを付けたい

Kyouko_kisaragi

総合スコア48

JavaScript

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

0グッド

0クリップ

投稿2016/12/29 15:16

javaScriptで、以下の機能を持つプログラムを作成しようとしています。

・テキストボックス1にサイトのURLを入力
・テキストボックス2に適当な文字を入力
・ボタンを押す
・テキストボックスの下に、テキストボックス2で入力された文字が、テキストボックス1のリンク付きで表示される

以下、ソースになります。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>要素の作成・追加</title> <script> var html_font; var html_link; // テキストボックスから値を取得し、URL付きリンクを作成する function link_create(){ // p要素を作成 var element_p = document.createElement('p'); // url_nameテキストボックスから入力値を取得 html_font = document.getElementById('url_name').value; element_p.innerHTML = html_font; // a要素を作成 var element_a = document.createElement('a'); // url_linkテキストボックスから入力値を取得 html_link = document.getElementById('url_link').value; element_a.innerHTML = html_link; add.appendChild(element_p + element_a); } // windowを開いたと同時に処理を行う window.onload = function(){ var add = document.getElementById('add'); add.addEventListener('click', link_create, false); } </script> </head> <body> URL:<input type="text" name="url_name"> リンク:<input type="text" name="url_link"> <button id="link">リンク追加</button> <div id="add"></div> </body> </html>

どんな方法を使用すれば、pタグとaタグを一緒に出力する(リンク状態にする)ことができるのでしょうか。
よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

下の箇所は、<div id="add"></div>をクリックしたときにリンクを追加するのではなくて、<button id="link">リンク追加</button>をクリックしたときにリンクを追加したいので、document.getElementById("link")とする必要があります。

Javascript

1var add = document.getElementById('add'); 2add.addEventListener('click', link_create, false);

それを踏まえて、質問者さんの実現したいことは以下のように行えると思います。

HTML

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>要素の作成・追加</title> 6 <script> 7 // テキストボックスから値を取得し、URL付きリンクを作成する 8 function link_create() { 9 while (document.getElementById("add").hasChildNodes()) { 10 document.getElementById("add").removeChild(document.getElementById("add").firstChild);//addに既に何か入っていたら削除する。 11 } 12 let createPara = document.createElement("p"); 13 let createAnchor = document.createElement("a"); 14 let urlText = document.getElementById("urlText").value; 15 let linkText = document.getElementById("linktext").value; 16 if (urlText.match(/^(https?|ftp):\/\//)) {//URLにプロトコル部が含まれていたらプロトコル部を除いてURLエンコードする。 17 let protoArr = urlText.split("/"); 18 let proto = protoArr[0] + "//"; 19 urlText = urlText.replace(/^(https?|ftp):\/\//, ""); 20 urlText = proto + encodeURI(urlText); 21 createAnchor.href = urlText; 22 } else {//プロトコル部がなければそのままURLエンコードをして先頭にhttp://をつける。 23 createAnchor.href = "http://" + encodeURI(urlText); 24 } 25 createAnchor.text = linkText; 26 createPara.appendChild(createAnchor);//aタグをpタグの子要素に設定。 27 document.getElementById("add").appendChild(createPara);//pタグをdivタグの子要素に指定。 28 } 29 30 // windowを開いたと同時に処理を行う 31 window.onload = function () { 32 let link = document.getElementById("link");//addではなくてlink。 33 link.addEventListener("click", link_create, false); 34 } 35 </script> 36</head> 37<body> 38<label for="urlText">URL: 39 <input type="text" name="url_name" id="urlText"> 40</label> 41<label for="linktext">リンク: 42 <input type="text" name="url_link" id="linktext"> 43</label> 44<button id="link">リンク追加</button> 45<div id="add"> 46</div> 47</body> 48</html>

投稿2016/12/29 15:57

編集2016/12/30 01:36
s8_chu

総合スコア14731

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

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

kei344

2016/12/29 19:15

横からすいません、下記部分は urlText に http:// が含まれていた場合 「http://http://example.com」となりませんか? createAnchor.href = "http://" + encodeURI(urlText);
s8_chu

2016/12/30 01:24

kei344さんの指摘された通り、urlTextにプロコトル部が含まれている場合の考慮を行っていませんでしたので修正しました。教えていただきありがとうございます。
guest

0

こんな感じでいかがでしょう。

HTML

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>要素の作成・追加</title> 6 <script> 7 // 入力値からタグを生成し、タグを表示する関数 8 var createAndShowLink = function() { 9 // 入力値を保持したInput(DOM)を取得 10 var urlName = document.getElementById('urlName'); 11 var urlText = document.getElementById('urlText'); 12 // それぞれのInputの値が入っていれば 13 if (urlName.value && urlText.value) { 14 // タグを生成 15 var p = document.createElement('p'); 16 var a = document.createElement('a'); 17 // タグを表示するDOMを取得 18 var add = document.getElementById('add'); 19 // a要素にhrefをセット 20 a.setAttribute('href', urlName.value); 21 // a要素にテキストをセット 22 a.innerHTML = urlText.value; 23 // p要素にa要素を追加 24 p.appendChild(a); 25 // p要素を表示 26 add.innerHTML = p.outerHTML; 27 // 入力値を空にする 28 urlName.value = ''; 29 urlText.value = ''; 30 // フォーカスを移す 31 urlName.focus(); 32 } else { 33 alert('URLまたはリンクが入力されていません'); 34 } 35 }; 36 37 // 初回ロード時の実行関数 38 var init = function() { 39 var link = document.getElementById('link'); 40 link.addEventListener('click', createAndShowLink); 41 }; 42 43 // 初回ロードをリッスン 44 window.addEventListener('load', init); 45 </script> 46</head> 47<body> 48 URL:<input type="text" name="url_name" id="urlName"> 49 リンク:<input type="text" name="url_link" id="urlText"> 50 <button id="link">リンク追加</button> 51 <div id="add"></div> 52</body> 53</html>

投稿2016/12/30 13:27

gentamura

総合スコア406

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問