2016-06-20 49 views
0

在jQuery的功能:
.on(event, [selector,] [data,] handler)jQuery如何區分'data'和'selector'參數?

的jQuery如何解析這一呼籲:
on('click', 'tag3',() => {})
tag3選擇數據

+2

使用源代碼,luke! https://github.com/jquery/jquery/blob/58c6ca9822afa42d3b40cca8edb0abe90a2bcb34/src/event.js#L36 – Tomalak

+0

選擇器是一個字符串或jQuery/DOM對象,數據是普通對象。 – gurvinder372

+1

只要您按照使用方法正確使用文檔,知道如何重要? – charlietfl

回答

1

最後一個參數必須是處理程序。因此,如果有兩個參數,那麼不存在data,也不存在selector

如果有四個參數比第二個必須是selector而第三個必須是data

因此,只有有三個參數纔會變得棘手。

如果第二個參數不是字符串,那麼它不能是選擇器,所以它必須是數據。

如果它是一個字符串,那麼它可能是一個選擇器或數據。現在jQuery可以通過在選擇器引擎中運行它並查看它是否是有效的選擇器來執行一些啓發式操作,但事實並非如此。它只是假設如果第二個參數是一個字符串,那麼它是一個選擇器。

0

jQuery如何區分'data'和'selector'參數?

它們具有不同的數據類型

數據 - 是一個普通的對象(不是DOM或jquery對象)

選擇 - 是一個字符串或一個jquery/DOM/DOM數組對象。

所以,jquery的可以辨認出的參數是否是通過判斷參數的性質,例如thisthis

return obj instanceof HTMLElement; //to check if it is a DOM object 

return obj instanceof jQuery; //to check if it is a jquery object 

TAG3一個選擇器或數據是選擇器還是數據?

documentation

如果將一個字符串作爲參數傳遞給$(),jQuery的檢查 字符串是否它看起來像HTML(即它開始)。 如果不是,則字符串被解釋爲選擇器表達式,如上面解釋的 。但是,如果該字符串看起來像是HTML片段,那麼jQuery將嘗試按照HTML所述創建新的DOM元素。 然後創建並返回一個jQuery對象,它指向這些 元素。

如果傳遞給jquery方法的字符串是HTML,那麼隨後的對象是document(DOM對象)或屬性對象。

+0

「如果一個字符串作爲參數傳遞給$(),」 - 問題是關於'on()'而不是'$()'。 – Quentin

+0

@Quentin哦,我的壞。無論如何,答案的上半部分仍然有效。 'on()'也檢查'typeof'參數值https://github.com/jquery/jquery/blob/58c6ca9822afa42d3b40cca8edb0abe90a2bcb34/src/event.js#L43 – gurvinder372

+0

無論如何,夥計們,謝謝!我在源代碼中發現,它檢查它是否是'string',所以它是選擇器。如果不是 - 數據 –