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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

319閲覧

【JS】タグの変換処理(<a>を<p>にしたい)

takahapi

総合スコア13

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2019/04/07 10:54

前提・実現したいこと

.cloneするときに<a><p>に変換したいです。

該当のソースコード

こちらです。コピーのクリックで要素がコピーされますが、そのときに<a>やそのhrefを削除し、代わりに<p>に置き換えたいです。

html

1<div id="first"> 2 <div class="inner"> 3 <ul> 4 <li><a>1</a></li> 5 <li><a>2</a></li> 6 </ul> 7 </div> 8</div> 9 10<button type="button">コピー</button> 11 12<div id="second"> 13</div> 14 15<script type="text/javascript"> 16$(function(){ 17 $('button').on('click',function(){ 18 var elem = $('#first ul'); 19 var dummy = $('<div>'); 20 dummy.append(elem.clone(true)); 21 var html = dummy.html(); 22 const second = ` 23 <div class="inner"> 24 ${html} 25 </div> 26 `; 27 $('#second').html(second); 28 }); 29}); 30</script>

うるさい注文ですみませんが、バッククオートを使うあたりの処理は変えたくないです。

理想的には

var html = dummy.html();
${html}
の部分を

var html = dummy.html();
var html_p = <a><p>に変換;
${html_p}
のような処理にできればわかりやすいのですが、

そんな都合よくいきますか?

いろいろ方法を知りたいです。

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

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

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

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

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

guest

回答2

0

javascript

1var clone = elem.clone(true) 2clone.find('a').replaceWith(function() { 3 return "<p>"+this.innerHTML+"</p>"; 4})

書いてる間に回答があったようですが、
せっかく書いたので、置いておきます。

投稿2019/04/07 11:40

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/04/07 11:57

作成したcloneのaタグをpタグに変更する処理です。 なので dummy.append(elem.clone(true)); 部分を、作成したcloneをappendするように変更します dummy.append(clone); 冗長な処理があるので、きれいにすると、最終的にはこのようになります。 https://codepen.io/anon/pen/axmNLN
takahapi

2019/04/07 12:00

どうもありがとうございます!なるほどすっきりしましたね!
退会済みユーザー

退会済みユーザー

2019/04/07 12:01

あっ、最後 $('#second').html(dummy); ではなく、 $('#second').append(dummy); の方が意味的にはいいと思います。
takahapi

2019/04/07 12:03

あー!ははー!わかりやすいかもですね。なるほど、可読性っていうのはそういうことなんですね。
guest

0

ベストアンサー

こんなかんじ?

$(function(){ $('button').on('click',function(){ var elem = $('#first ul'); var dummy = $('<div>'); dummy.append(elem.clone(true)); //////////////////////////////////////////////////////////// dummy.find('a').each((_, e) => { // 中の <a> 全部に対して $e = $(e); $e.after($('<p>').html($e.html())); // <a> の直後に <p> を追加して a の中身だけ放り込む $e.remove(); // <a> を削除する }); //////////////////////////////////////////////////////////// var html = dummy.html(); const second = ` <div class="inner"> ${html} </div> `; $('#second').html(second); }); });

投稿2019/04/07 11:23

mypt

総合スコア170

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

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

takahapi

2019/04/07 11:29

わすげぇwwどうもありがとうございます! dummy.find('a').each((_, e) => { // 中の <a> 全部に対して $e = $(e); ここ↑わけわからないんですが、どこかネットに情報ありませんでしょうか? 特に .each((_, e) => { いったいどういう名前の処理ですか?
mypt

2019/04/07 11:36 編集

each は要素全部にメソッドを適用するっていうもので for より軽いのでわりとよくつかう構文ですが 慣れてないと難しいのかも const a_list = dummy.find('a'); for(const e in a_list) { $e = $(e); ... と同じことです } a_list の各要素に対して function f = (_, e) { ... } を適用するっていう書き方になります
takahapi

2019/04/07 11:36

それは楽ですね!重ねてお礼申し上げます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問