Soru $ ($ (This)) ne anlama geliyor?


Web'de aşağıdaki ifadeyi kullanan bir kod gördüm.

if ($($(this)).hasClass("footer_default")) {
      $('#abc')
        .appendTo($(this))
        .toolbar({position: "fixed"});
    }

Ne işe yarar $($(this)) ve neden burada gerekli?


51
2018-02-10 07:16


Menşei


Sadece $ (this) olarak değiştirin, aynı sonucu verecektir. - Adil
Bazı moronların güvende olacağını ve iki kez sarılacağını düşündü. - adeneo
Anlamı - "Kim izin o kod işlenecek? " - user2864740
Ayrıca atamanın daha verimli olduğunu unutmayın. $(this) yerine bir kez yerel bir değişkene $(this) bir kaç sefer. - Alvin Wong
Batıl kod olarak adlandırdığımız şey bu. - Boann


Cevaplar:


Evet, $($(this)) aynıdır $(this), jQuery() veya $() fonksiyon harika idempotent. Bu inşaatın bir sebebi yoktur. thisAncak, ilk elemanı sadece benzer bir çift sargı içeren bir gruptan ayırmak için kısayol olarak kullandığım bir şey,

$($('selector')[0]) 

Hangi tutar, eşleşen her elementi yakalar selector(jQuery nesnesini döndürür), sonra kullanın [0] listeden ilkini kapmak için DOM nesne), sonra sarın $() tekrar bir jQuery nesnesine geri döndürmek için bu kez yalnızca bir koleksiyon yerine tek bir öğe içerir. Kabaca eşdeğerdir

document.querySelectorAll('selector')[0];, bu oldukça fazla document.querySelector('selector');


78
2018-02-10 07:32



Teşekkürler. Sanırım aradığım şey bu. Bunu web boyunca görmüştüm, şimdi çift sarma ile ilgili vakaların daha fazla farkındayım. - guest
Tam olarak idempotence değil. Idempotent fonksiyonu her zaman aynı girişi verirse aynı döner, böylece saf bir işlev doğal olarak idempotenttir. Örneğin, kare (x) idempotent, ancak kare (kare (x)) çağıran kare (x) için farklı bir sonuç döndürecektir. Bu anlamda jQuery, daha ziyade, idempotence için, oldukça etkilidir. - Owen
Açıkçası, buldum $($('selector')[0]) ile karşılaştırıldığında, okumak için çok daha zor $('selector:eq(0)') ya da $('selector:first')ve çift "yapıcı" nedeniyle daha kötü performans gösterecektir. - UweB
Owen, iğrençliği enjeksiyonla karıştırdığını düşünüyorum. Kontrol Idempotence ve Enjeksiyon. Her neyse, $ () genellikle idempotent değildir, ancak argüman jquery nesnesiyse, aldığı nesneyi döndürür. - Luis Carvalho
Ben şahsen tercih ederim $('selector').eq(0) jquery nesnesi olarak sadece ilk öğeyi almaya çalışıyorsam - George


Sarılabilir $ İstediğiniz kadar defa, hiçbir şey değiştirmeyecek.

Eğer foo bir DOM öğesidir $(foo) ilgili jQuery nesnesini döndürür.

Eğer foo jQuery nesnesi $(foo) aynı nesneyi döndürür.

Bu yüzden $($(this)) tam olarak aynı döner $(this).


29
2018-02-10 07:20





Çift sarmaya özel ihtiyaç yoktur ve $($(this)) tam olarak aynı $(this).

Bu, bir keresinde bu çift sarmayı, projemde bir başka geliştirici tarafından işlenen bir dosyada buldum. Değişiklikleri revizyonla takip etmek, şu şekilde başladığını ortaya çıkardı: $($(this).find('selector').first()) - Yani, bazı seçmenlerin sonucu yeni bir nesne yaratmak için sarıldı. Daha sonra ne olursa olsun, seçici çıkarıldı ve sadece çift sarmalı this kalmıştır. Söylemeye gerek yok, bir sonraki taahhütte değişti $(this).


8
2018-02-10 12:54





Benden önce açıklandığı gibi, $($(this)) ve $(this) kesinlikle aynıdır. jQuery, bir kereden fazla sarmayı denerseniz, aynı jQuery nesnesini döndürür.

Ek olarak, performans değerlendirmeleri için jQuery nesnelerini yeniden kullanmak iyi bir uygulamadır - özellikle karmaşık seçicilere sahip olan jQuery nesneleri oluşturmak oldukça pahalıdır. Örnek:

var $this = $(this);
if ($this.hasClass("footer_default")) {
    $('#abc')
        .appendTo($this)
        .toolbar({position: "fixed"});
}

Sadece google 'jQuery en iyi uygulamaları' - Bu temel bilgileri öğrenmek için 30 dakika sürecek ve jQuery yolunu daha etkili bir şekilde kullanacaksınız.


6
2018-02-10 14:35





Bunu yapmakta zorlanma yok.

Aşağıdaki kod aynı şeyi döndürür:

console.log($($(this)).hasClass("footer_default"))
console.log($(this).hasClass("footer_default"))

Seçilen elemanın derse sahip olup olmadığı konusunda bir boole değeri footer_default:

.hasClass (className) Döndürür: Boole

Demo: http://jsfiddle.net/IrvinDominin/aSzFn/


3
2018-02-10 07:22





$(this) ve $($(this)) her ikisi de jquery nesnesini döndürür.

Bu ikisi arasında fark yoktur.


3
2018-02-10 07:23