[英]What does $($(this)) mean?
我在Web上看到了一些使用以下語句的代碼
if ($($(this)).hasClass("footer_default")) {
$('#abc')
.appendTo($(this))
.toolbar({position: "fixed"});
}
$($(this))
有什么用?為什么這里有必要?
是的, $($(this))
與$(this)
相同, jQuery()
或$()
函數非常冪等 。 沒有理由對特定結構(雙包裝this
),不過,我作為快捷方式使用僅由一組,其中涉及類似的雙包裝抓住了第一個元素的東西,是
$($('selector')[0])
相當於,抓取匹配selector
每個元素(返回一個jQuery對象),然后使用[0]
抓取列表中的第一個(返回一個DOM
對象),然后再次將它包裝在$()
以轉向它回到一個jQuery對象,這次只包含一個元素而不是一個集合。 它大致相當於
document.querySelectorAll('selector')[0];
,這幾乎是document.querySelector('selector');
你可以根據需要多次包裝$
,它不會改變任何東西。
如果foo
是DOM元素, $(foo)
將返回相應的jQuery對象。
如果foo
是一個jQuery對象, $(foo)
將返回相同的對象。
這就是為什么$($(this))
將返回與$(this)
完全相同的原因。
沒有特別需要雙層包裝, $($(this))
與$(this)
完全相同。
也就是說,我曾經在我的項目中的一個文件中找到了這個雙包裝,由另一個開發人員提交。 通過修訂跟蹤更改,結果發現它以$($(this).find('selector').first())
- 也就是說,某個選擇器的結果被包裝以創建一個新對象。 那么不管是什么原因,除去選擇和唯一的雙包裝this
仍然存在。 毋庸置疑,在下次提交時它被改為$(this)
。
如前所述, $($(this))
和$(this)
完全相同。 如果您嘗試多次包裝它,jQuery將返回相同的jQuery對象。
此外,出於性能考慮,重用jQuery對象是一個好習慣 - 創建jQuery對象非常昂貴,尤其是具有復雜選擇器的對象。 例:
var $this = $(this);
if ($this.hasClass("footer_default")) {
$('#abc')
.appendTo($this)
.toolbar({position: "fixed"});
}
只需google獲取'jQuery最佳實踐' - 您需要30分鍾才能學習這些基礎知識,並且您將更有效地使用jQuery方法。
沒有這樣做的重要性。
以下代碼返回相同的內容:
console.log($($(this)).hasClass("footer_default"))
console.log($(this).hasClass("footer_default"))
如果所選元素是否具有類footer_default
,則取決於布爾值:
.hasClass(className)返回:Boolean
$(this)
和$($(this))
都返回jquery對象。
這兩者沒有區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.