🐥
jQueryを使って既存inputをdivに埋め込むコードを書いてみた
やりたいこと
HTMLで定義してあるinputをjQueryで作ったdivの中に埋め込みます。
ただ置き換えやappendだけではうまくできなかったのでそのやり方を紹介します。
処理の流れ
下の流れでコードを組んでみます。
- divのjqueryElementを作成
- 既存のinputを変数に格納
- 既存のinputを1で作成したdivに置き換え
- 置き換えたdivに既存のinputを追加
実際のコード
まずは表示用のHTMLを作成します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<link rel="stylesheet" href="css/index.css" />
<title>append input to div with jquery</title>
</head>
<body>
<input type="text" id="moveInput" />
<p><input type="button" id="replaceBtn" value="置き換え" /></p>
</body>
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"
></script>
<script src="script.js"></script>
</html>
次に新規のDIVに置き換わったことがわかりやすくするために、CSSでDIVに背景色とpaddingを設定します。
.box {
background-color: rgb(130, 139, 219);
padding: 12px;
}
最後に本題のJavaScriptのコードを作成します。
const $moveInput = $("#moveInput"); //既存input
const $newDiv = $("<div></div>").attr("class", "box"); //既存inputを入れるdiv
const $replaceBtn = $("#replaceBtn"); //操作用ボタン
//操作用ボタン押下
$replaceBtn.click(function () {
//既存inputの親要素をチェック
if ($moveInput.parent().get(0).tagName === "BODY") {
/** 既存inputの親要素がBODYの場合 */
$moveInput.replaceWith($newDiv); //既存inputをdivに置き換える
$newDiv.append($moveInput); //既存inputをdivに追加する
$replaceBtn.val("戻す");
} else {
/** 既存inputの親要素がBODYじゃない場合 */
$newDiv.replaceWith($moveInput);//divを既存inputに置き換える
$replaceBtn.val("置き換え");
}
});
実行結果
上のコードを実際に動かすと以下のようになります。
置き換えボタンを押すとまず既存inputをdivで置き換えてしまいますが、その前に変数に既存inputを格納することで、メモリ上に既存inputの情報が残り使うことができるようです。
Discussion