Diyelim ki boş bir div var:
<div id='myDiv'></div>
Bu:
$('#myDiv').html("<div id='mySecondDiv'></div>");
Aynı:
var mySecondDiv=$("<div id='mySecondDiv'></div>");
$('#myDiv').append(mySecondDiv);
Diyelim ki boş bir div var:
<div id='myDiv'></div>
Bu:
$('#myDiv').html("<div id='mySecondDiv'></div>");
Aynı:
var mySecondDiv=$("<div id='mySecondDiv'></div>");
$('#myDiv').append(mySecondDiv);
Yanıtlar:
JQuery'nin yöntemlerinden herhangi birine bir HTML dizesi ilettiğinizde, olan budur:
Geçici bir eleman yaratıldı, buna x diyelim. x's innerHTML
, geçirdiğiniz HTML dizesine ayarlanır. Daha sonra jQuery, üretilen düğümlerin (yani x'lerin) her birini childNodes
yeni oluşturulmuş bir belge parçasına aktarır ve daha sonra bir dahaki sefere önbelleğe alır. Daha sonra parçanın childNodes
yeni bir DOM koleksiyonu olarak döndürülecektir .
JQuery bir dizi çapraz tarayıcı kontrolü ve diğer çeşitli optimizasyonlar yaptığı için aslında bundan çok daha karmaşık olduğunu unutmayın. Sadece geçirirseniz Ör <div></div>
için jQuery()
, jQuery kestirme yollardan sadece yapacağız document.createElement('div')
.
DÜZENLEME : jQuery'nin gerçekleştirdiği çok sayıda denetimi görmek için buraya , buraya ve buraya bir göz atın .
innerHTML
her zaman ne yaptığınızı yönetmesine izin vermese de , genellikle daha hızlı bir yaklaşımdır. jQuery'nin yaklaşımı kadar basit değil element.innerHTML = ...
- bahsettiğim gibi, bir sürü kontrol ve optimizasyon var.
Doğru teknik büyük ölçüde duruma bağlıdır. Çok sayıda özdeş öğe oluşturmak istiyorsanız, yapmak istediğiniz son şey, her yinelemede yeni bir jQuery nesnesi oluşturarak büyük bir döngü oluşturmaktır. Örneğin, jQuery ile 100 div oluşturmanın en hızlı yolu:
jQuery(Array(101).join('<div></div>'));
Ayrıca dikkate alınması gereken okunabilirlik ve bakım sorunları da vardır.
Bu:
$('<div id="' + someID + '" class="foobar">' + content + '</div>');
... olan çok bundan daha bakımı zordur:
$('<div/>', {
id: someID,
className: 'foobar',
html: content
});
101
100 yapıştırıcı olacak sadece 2 yapıştırıcı olurdu 3 unsurları bir araya gelmek gibi, uygulanan: EL-glue-EL-glue-EL
. James örneğinde, dizi elemanları "boş" olduğundan N boş elemanların birleştirilmesi ardışık N-1 tutkalları ile sonuçlanır.
Aynı değiller. Birincisi, önce başka bir jQuery nesnesi oluşturmadan HTML'nin yerini alır . İkincisi, ikinci div için ek bir jQuery sarıcı oluşturur, sonra onu ilkine ekler .
Bir jQuery Sarıcı (örnek başına):
$("#myDiv").html('<div id="mySecondDiv"></div>');
$("#myDiv").append('<div id="mySecondDiv"></div>');
İki jQuery Sarıcı (örnek başına):
var mySecondDiv=$('<div id="mySecondDiv"></div>');
$('#myDiv').html(mySecondDiv);
var mySecondDiv=$('<div id="mySecondDiv"></div>');
$('#myDiv').append(mySecondDiv);
Birkaç farklı kullanım vakanız var. İçeriği değiştirmek istiyorsanız .html
, eşdeğer olduğundan büyük bir çağrıdır innerHTML = "..."
. Ancak, yalnızca içerik eklemek istiyorsanız, ekstra $()
sarmalayıcı kümesine gerek yoktur.
Eklenenleri div
daha sonra değiştirmeniz gerekiyorsa yalnızca iki sarmalayıcı kullanın . Bu durumda bile, yine de sadece birini kullanmanız gerekebilir:
var mySecondDiv = $("<div id='mySecondDiv'></div>").appendTo("#myDiv");
// other code here
mySecondDiv.hide();
tarafından eğer .add
Şunu .append
, sonuç ise aynıdır #myDiv
boştur.
performans aynı mı? bilmiyorum.
.html(x)
sonunda aynı şeyi yapıyor .empty().append(x)
Eh, .html()
kullanımları .innerHTML
daha hızlı olan DOM oluşturma.
Aynı etkiyi elde etmek için ikinci yöntemi aşağıdaki yollarla elde edebilirsiniz:
var mySecondDiv = $('<div></div>');
$(mySecondDiv).find('div').attr('id', 'mySecondDiv');
$('#myDiv').append(mySecondDiv);
Luca, html()
hte HTML'yi eklediğinden, daha hızlı performans sağladığından söz etti .
Yine de bazı durumlarda, ikinci seçeneği tercih edersiniz, düşünün:
// Clumsy string concat, error prone
$('#myDiv').html("<div style='width:'" + myWidth + "'px'>Lorem ipsum</div>");
// Isn't this a lot cleaner? (though longer)
var newDiv = $('<div></div>');
$(newDiv).find('div').css('width', myWidth);
$('#myDiv').append(newDiv);
px
$('<div />', { width: myWidth }).appendTo("#myDiv");
Verilen cevapların dışında, böyle bir şeyiniz olması durumunda:
<div id="test">
<input type="file" name="file0" onchange="changed()">
</div>
<script type="text/javascript">
var isAllowed = true;
function changed()
{
if (isAllowed)
{
var tmpHTML = $('#test').html();
tmpHTML += "<input type=\"file\" name=\"file1\" onchange=\"changed()\">";
$('#test').html(tmpHTML);
isAllowed = false;
}
}
</script>
yani herhangi bir dosya yüklendiyse otomatik olarak bir dosya daha yüklemek istersiniz, belirtilen kod çalışmaz, çünkü dosya yüklendikten sonra ilk dosya yükleme öğesi yeniden oluşturulur ve bu nedenle yüklenen dosya ondan silinir . Bunun yerine .append () yöntemini kullanmalısınız:
function changed()
{
if (isAllowed)
{
var tmpHTML = "<input type=\"file\" name=\"file1\" onchange=\"changed()\">";
$('#test').append(tmpHTML);
isAllowed = false;
}
}
Bu bana oldu . Jquery sürümü: 3.3. Bir nesne listesinde döngü yapıyorsanız ve her nesneyi bir üst dom öğesinin alt öğesi olarak eklemek istiyorsanız, .html ve .append çok farklı davranır. .html
üst öğeye yalnızca son nesneyi eklerken, .append
tüm liste nesnelerini üst öğenin alt öğesi olarak ekler.