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

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

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

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

Q&A

解決済

4回答

621閲覧

javascriptでhtml内容物前後にタグ挿入する方法

blendegg

総合スコア81

JavaScript

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

0グッド

1クリップ

投稿2021/06/06 21:17

htmlを以下のように書き換えたいのですが、適切な関数があれば教えて下さい。

<!--書き換え前--> <div id="test_div2">中身だよ</div> <!--書き換え後--> <div id="test_div2"><span>中身だよ</span></div>

シンプルにこれでもいけます

let get_div2 = document.querySelector("#test_div2"); get_div2.innerHTML = "<span>" + test_div2.innerHTML + "</span>";

しかし、これだと以下のような結果になります。

let get_div2 = document.querySelector("#test_div2"); get_div2.insertAdjacentHTML("beforeend","<span>"); get_div2.insertAdjacentHTML("afterbegin","</span>");
<div id="test_div2">中身だよ<span></span></div>

このhtml内容物の前後を、別のタグで挟み込むという処理のやり方が見つからなかったので、よく使われる方法を教えて下さい。

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

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

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

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

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

m.ts10806

2021/06/06 21:46 編集

「一発でできる」を求めてるなら「ない」となるのでは。 同じようにinnerHTMLもしくはappendChild・またはappend,prependで2回
K_3578

2021/06/07 05:58

以前も指摘しましたが回答が付いているのに反応がなく、未解決の質問が過去に多数ありますが、 何かしら対応されないのでしょうか。
guest

回答4

0

ベストアンサー

シンプルにこれでもいけます

それをやるか、別にdocument.createElement('span')したところにappendChildしていくか(コードとしてはより長くなる)です。

insertAdjacentHTMLは、「パースした結果であるノード」を挿入するものなので(MDN)、「</span>だけ挿入」のようなことはできません。

投稿2021/06/07 00:23

maisumakun

総合スコア145201

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

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

blendegg

2021/06/07 02:15

回答ありがとうございます。このように設定してみましたが、divの中身は"[object HTMLSpanElement]"となります。 let test_div2 = document.getElementById("test_div2"); let span = document.createElement("span"); span.textContent = test_div2.innerHTML; test_div2.innerHTML = span; 教えていただいたとおりappendchildを使用しました。 無事追加出来ましたが、古い内容物が残ったままなのでreplacechildを使用しました。 let test_div2 = document.getElementById("test_div2"); let span = document.createElement("span"); span.textContent = test_div2.innerHTML; test_div2.replaceChild(span,test_div2.innerHTML); こうした場合、4行目の第2引数にエラーが出ます。 エラー:Uncaught TypeError: Node.replaceChild: Argument 2 is not an object. 第2引数はオブジェクトではないということですが、javascriptにおけるオブジェクトとはなんのことでしょうか?おそらくdom(htmlタグ)がオブジェクトなんでしょうけども、文字列のみを置き換える事はできますか?
maisumakun

2021/06/07 02:19

> 文字列のみを置き換える事はできますか? 文字列もdocument.createTextNodeを使うことでDOMノードとして扱うことが可能です。
maisumakun

2021/06/07 02:20

(シンプルにやりたい、というのはどこへ行ったのでしょうか…?)
blendegg

2021/06/07 04:03

文字はオブジェクトのプロパティとして設定しないといけないんですね。 単なる文字列はオブジェクトとして扱われないということですね。 シンプルにやればいいというのは、innnerhtmlを使えば良いということですよね? 一応replace childの使い方も覚えておきたかったので、、、。
guest

0

シンプルにこれでもいけます

シンプルにそれでやってください。もしくはこう

javascript

1const div=document.querySelector('#test_div2'); 2div.appendChild([...div.childNodes].reduce((x,y)=>(x.appendChild(y),x),document.createElement('span')));

投稿2021/06/07 00:23

yambejp

総合スコア114951

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

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

0

jqueryの関数を使えばシンプルにできますよ

投稿2021/06/07 03:01

post123456

総合スコア73

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

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

0

Range.selectNodeContents()Range.surroundContents() の組み合わせで実現する方法がありますが、コードがとくにシンプルになるわけでもないので、質問文にある方法で良いと思います。

投稿2021/06/07 02:25

int32_t

総合スコア20941

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問