
javascriptでdivの中身を下記のように仕組みを作りたいのですが、思うようにできません。
どなたかご教示のほどよろしくお願い致します。
【HTML内に書く内容】
<article id="textbox">
<p>このエリアにHTML要素を追加する</p>
</article>
【javascriptでやりたいこと】
・上記<p>の中身に<div>要素を入れて<p>を複数作成したいです
・<p>の数は状況に応じて自由に数を調整したいです
勉強しはじめな為、質問内容が不十分でしたら申し訳ございません。
よろしくお願い致します。
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
#5
このサイトhttpから始まる文字が勝手にリンクに変わっちゃうので
ダメですね
以下、ttpをコピー後httpに書き換えてためしてください
<script>
window.addEventListener('DOMContentLoaded', ()=>{
const texts = [
{"tag":"a","param":{"href":"ttps://www.yahoo.co.jp/","target":"blank","textContent":"yahooのリンク"}},
{"tag":"a","param":{"href":"ttps://www.goo.ne.jp/","target":"blank","textContent":"gooのリンク"}},
{"tag":"a","param":{"href":"ttps://www.amazon.co.jp/","target":"blank","textContent":"amazonのリンク"}},
];
const textbox = document.querySelector('#textbox');
textbox.innerHTML = '';
texts.forEach(x=>{
const p=document.createElement('p');
p.appendChild(Object.assign(document.createElement(x.tag),x.param));
textbox.appendChild(p);
});
});
</script>
<article id="textbox">
<p>このエリアにHTML要素を追加する</p>
</article>
yambejp様
改めて、いただいた内容で無事リンクが効きました。
ご教示いただきましてどうもありがとうございました。
大変勉強になりました。
またお世話になることがありましたらよろしくお願い致します。
No.6
- 回答日時:
#5
あーなるほど、行き違いがあったようですみません。
ようやく理解しました。
textsはDOM用にいじってよいのですよね?であればこんな感じで
<script>
window.addEventListener('DOMContentLoaded', ()=>{
const texts = [
{"tag":"a","param":{"href":"https://www.yahoo.co.jp/","target":"blank","text …のリンク"}},
{"tag":"a","param":{"href":"https://www.goo.ne.jp/","target":"blank","text": …のリンク"}},
{"tag":"a","param":{"href":"https://www.amazon.co.jp/","target":"blank","tex …のリンク"}},
];
const textbox = document.querySelector('#textbox');
textbox.innerHTML = '';
texts.forEach(x=>{
const p=document.createElement('p');
p.appendChild(Object.assign(document.createElement(x.tag),x.param));
textbox.appendChild(p);
});
});
</script>
<article id="textbox">
<p>このエリアにHTML要素を追加する</p>
</article>
yambejp様
ありがとうございます。
今テストしてみたのですが、HTML側に書いた文字(<p>このエリアにHTML要素を追加する</p>)が、中身が3つのリンクに書き換わらず、そのまま「このエリアにHTML要素を追加する」と表示がされてしまいます。
ちなみに、リンク2番目の
{"tag":"a","param":{"href":"https://www.goo.ne.jp/","target":"blank","text": …のリンク"}},
最後の部分の
"text": …のリンク"
が、他と見比べているうちに、「": 」が多いのかなと思い
"text …のリンク"
としてテストしてみましたが、これでも書き換わりませんでした。
申し訳ございませんが、再度ご教示いただけますでしょうか。
よろしくお願い致します。
No.5
- 回答日時:
> #4
いや、そういうことではありません。
#1のお礼欄にaタグを使いたいということなので#3を提示しました。
#4のお礼欄を見てもaタグを作るための要素hrefやテキストなどが
記載されてないので、例えばtexts 配列でどういうデータを渡して
どういう結果がほしいのかを書いてほしい・・・ということです
yambejp様
失礼致しました。
テキストの部分に実際には会社のHP内のページリンクをつけるのですが、
こちらでは例としてリンクを3つ入れました。
よろしくお願い致します。
<script>
// 追加したいテキストはここに入力
let texts = [
'<a href="https://www.yahoo.co.jp/" target="_blank">yahooのリンク</a>',
'<a href="https://www.goo.ne.jp/" target="_blank">gooのリンク</a>',
'<a href="https://www.amazon.co.jp/" target="_blank">amazonのリンク</a>'
];
let textbox = document.getElementById('textbox');
textbox.innerHTML = ''; // もともとの子要素を消す
let div = document.createElement('div');
let p = [];
for(let i = 0,len = texts.length;i<len;i++){
p[i] = document.createElement('p'); // p要素を作る
p[i].textContent = texts[i]; // テキストを代入
div.appendChild(p[i]); // pをdivに追加
}
textbox.appendChild(div); // divをarticleに追加
</script>
<article id="textbox">
<p>このエリアにHTML要素を追加する</p>
</article>
No.4
- 回答日時:
#3
> 一緒に書けばよろしいのでしょうか?
仕様をもう一度まとめて補足をつけてください
私のコードは単品でコピペすれば動作するはずです
yambejp様
補足の文字数をオーバーします為こちらに失礼致します。
下記のようにテキストを複数作成できる仕様でのDOM処理の仕方をご教示願います。
お手数をお掛けいたしますがよろしくお願い致します。
<script>
// 追加したいテキストはここに入力
let texts = [
'テキスト1',
'テキスト2',
'テキスト3'
];
let textbox = document.getElementById('textbox');
textbox.innerHTML = ''; // もともとの子要素を消す
let div = document.createElement('div');
let p = [];
for(let i = 0,len = texts.length;i<len;i++){
p[i] = document.createElement('p'); // p要素を作る
p[i].textContent = texts[i]; // テキストを代入
div.appendChild(p[i]); // pをdivに追加
}
textbox.appendChild(div); // divをarticleに追加
</script>
<article id="textbox">
<p>このエリアにHTML要素を追加する</p>
</article>
No.3
- 回答日時:
> アンカーリンクを設定したい場合
以下のようにDOMで処理してください
<script>
window.addEventListener('DOMContentLoaded', function(e){
let a=Object.assign(document.createElement('a'),{href:"#test",textContent:"test"});
document.querySelector('#textbox p').appendChild(a);
});
</script>
<article id="textbox">
<p>このエリアにHTML要素を追加する</p>
</article>
yambejp様
ご回答いただきありがとうございます。
いただいた内容の<script>部分をNo1の回答者様の<script>と一緒に書けばよろしいのでしょうか?
No.2
- 回答日時:
No1です。
>テキストを入れるところにアンカーリンクを設定したい場合、
>アンカーリンク部分<a href="~~~~">テキスト</a>が見えてしまう
この場合は、テキストを代入するところで、
textContentを、innerHTMLに変えると動きます。
が、わたしも詳しくはないのですが、
innerHTMLによる代入は、
使い方によってはセキュリティ上の問題が発生するそうです。
どのような場面でこの仕組みを使われるのか分かりませんが、
使うときは、何が代入されうるのか、
確認して使ってください。
「innerHTML セキュリティ」などで検索されると、
いくつか事例が出てくるようです。
sukitaro様
ご教示いただいた方法にて解決致しました。
セキュリティ上の問題もあるとのこと承知致しました。
勉強になります。
使用するのは会社の環境で、ある管理画面の機能で賄えない部分の対応としてご質問させていただきました。
会社の件でもありますので、セキュリティを注意して参考とさせていただきます。
早急なご回答をどうもありがとうございました。
No.1
- 回答日時:
おそらくですが、
articleの中にdivを入れて、
そのdivの中にpを複数入れる
ということで良いでしょうか。
<script>
// 追加したいテキストはここに入力
let texts = [
'テキスト1',
'テキスト2',
'テキスト3'
];
let textbox = document.getElementById('textbox');
textbox.innerHTML = ''; // もともとの子要素を消す
let div = document.createElement('div');
let p = [];
for(let i = 0,len = texts.length;i<len;i++){
p[i] = document.createElement('p'); // p要素を作る
p[i].textContent = texts[i]; // テキストを代入
div.appendChild(p[i]); // pをdivに追加
}
textbox.appendChild(div); // divをarticleに追加
</script>
sukitaro様
早速のご回答をありがとうございます。
まさにやりたかった内容です!
1点、テキストを入れるところにアンカーリンクを設定したい場合、
アンカーリンク部分<a href="~~~~">テキスト</a>が見えてしまうのですが、この場合はどのようにすればよろしいでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オブジェクト配列の各メンバを...
-
Outlookのアカウントがあるとメ...
-
スマホ上で、左右スワイプで次...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
jsで質問です。 formをsubmitし...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Adobe acrobat proでフォームを...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
-
HTMLでサブフレームから親のス...
-
ジャバスクリプトについて。
-
プログラムについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DOMで追加した要素が「前に戻る...
-
式の開始が不正です メソッド
-
フレームワークのjavaScriptに...
-
javascriptの参考書
-
PHPでjavascriptの知識が必要に...
-
PowerPointで時計表示
-
JSPの処理の途中で、JavaScript...
-
VB.NET2003 テキストボックスに...
-
正整数の半角数字かどうか判定する
-
VBAによる第3、4水準文字の判定...
-
以下のコードを実行しても、オ...
-
初心者です。gulpでコンパイル...
-
ブラウザの横幅に応じてとある...
-
if(1){...}とはどういうことで...
-
VBA SORT Applyでエラー
-
エクセルVBA/ Formatで文字列が...
-
javascriptからサーバサイドの...
-
jQuery ui Datepicker 明日以降...
-
Javascriptエラーの原因が分か...
-
VBA ステータスバー DoEvents
おすすめ情報
yambejp様
ご回答いただきありがとうございます。
いただいた内容の<script>部分をNo1の回答者様の<script>と一緒に書けばよろしいのでしょうか?
yambejp様
ありがとうございます。
明日の朝出社しましたらすぐに試してみます。
またご報告させていただきます。