jQuery如何区分'data'和'selector'参数?
在jQuery函数中:
.on(event, [selector,] [data,] handler)
jQuery如何解析这个调用:
on('click', 'tag3', () => {})
tag3
是选择器还是数据 ?
最后一个参数必须是处理程序。 所以如果有两个参数那里没有data
和selector
。
如果有四个参数,而第二个必须是selector
,而第三个必须是data
。
所以只有三个参数才会变得棘手。
如果第二个参数不是一个字符串,那么它不能是一个选择器,所以它必须是数据。
如果它是一个字符串,那么它可能是一个选择器或数据。 现在jQuery可以通过在选择器引擎中运行它并查看它是否是有效的选择器来执行一些启发式操作,但事实并非如此。 它只是假设如果第二个参数是一个字符串,那么它是一个选择器。
jQuery如何区分'data'和'selector'参数?
他们有不同的数据类型
数据 - 是一个普通的对象(不是DOM或jquery对象)
选择器 - 是一个字符串或jQuery / DOM / DOM数组对象。
所以,jQuery可以通过判断参数的属性来确定参数是选择器还是数据,例如this和this
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是选择器还是数据?
根据文件
如果一个字符串作为参数传递给$(),jQuery会检查字符串以查看它是否看起来像HTML(即以它开头)。 如果不是,如上所述,字符串被解释为选择器表达式。 但是,如果该字符串看起来像一个HTML片段,那么jQuery将尝试按照HTML所描述的方式创建新的DOM元素。 然后创建并返回一个引用这些元素的jQuery对象。
如果传递给jquery方法的字符串是HTML,那么随后的对象是document
(DOM对象)或属性对象。
上一篇: How jQuery distinguish between 'data' and 'selector' parameter?