ここで正確に何が起こっているのかわかりません。変数がjqueryオブジェクトであるという事実だと思います。
これは一度だけ追加されます、私の質問はなぜですか?
var newInput = $('<input/>');
$('#newDiv').append(newInput);
$('#newDiv').append(newInput);
これは私が想定するように機能しますが
var newInput = '<input>';
$('#newDiv').append(newInput);
$('#newDiv').append(newInput);
ご協力ありがとうございました!
最初のケースでは、$
はhtmlを解析し、HTMLInputElement
をラップする新しいjQueryオブジェクトを作成します。
基本的に、それは次のようなものです。
var $newDiv = $('#newDiv'),
newInput = document.createElement('input');
$newDiv.append(newInput);
$newDiv.append(newInput);
2番目のケースでは、毎回htmlを解析し、インスタンスごとに異なるjQueryオブジェクトを生成します。
最初のサンプルを修正する方法は次のとおりです。
var newInput = $('<input/>');
$('#newDiv').append(newInput);
$('#newDiv').append(newInput.clone());
これは、最初のケースでは同じ要素を参照しているためですobject(同じ要素を追加して新しい場所に追加します)、2番目のケースではhtmlを文字列として追加して複数の要素を追加します(毎回新しい要素)。
ループを使用して毎回新しい要素を作成することにより、複数の要素を追加できます。
(function(){
for(var i=0; i<10; i++){
var newInput = $('<input>');
$('#newDiv').append(newInput);
}})();
input {border:1px solid red; margin:3px}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="newDiv"></div>