以下代码行来自官方dialog/#modal-form example
allFields = $( [] ).add( name )
有人可以澄清$( [] )
的作用吗?它与$("*")
相同吗?
另一件令我困惑的事情是,我没有看到allFields
被添加/附加到任何/任何对象,它只是被创建和修改。我错过了什么吗?
答案 0 :(得分:5)
$([])
创建一个空的jQuery对象,就像$()
一样。 $('*')
创建一个jQuery对象,该对象包含与CSS选择器*
匹配的所有元素,每个元素都匹配。
换句话说,$([])
没有任何结果,$('*')
可以获得所有内容。
答案 1 :(得分:3)
如果您查看doco for the jQuery()
function - 通常被视为简写版$()
- 您会看到它接受几种不同类型和参数组合。
您询问的语法:
$([])
是jQuery( elementArray )
语法,它允许您传递一个DOM元素数组,其中返回将是包装这些元素的jQuery对象。通过传递一个空数组,你基本上得到一个空的jQuery对象(就像你传递一个与任何东西都不匹配的选择器字符串一样,但没有先尝试找到匹配的低效率。)
创建时allFields
添加了三个DOM元素(其中name
,email
和password
就在此之前创建为每个包含一个DOM元素的jQuery对象:
allFields = $( [] ).add( name ).add( email ).add( password )
大概是添加单个项目的优势而不仅仅是:
allFields = $("#name,#email,#password")
是每个元素的单个对象也是必需的,并且无论如何都会被创建,所以不需要通过查询字符串来重新选择它们。
另一件令我感到困惑的是,我没有看到
allFields
被添加/附加到任何/任何对象,它只是被创建和修改,我错过了什么?
在代码中的其他两个地方引用它:
allFields.removeClass( "ui-state-error" );
// and, later
allFields.val( "" ).removeClass( "ui-state-error" );
这是相当标准的jQuery用法,用于删除类或设置jQuery对象中所有元素的值。不需要将它添加到其他对象中。
答案 2 :(得分:1)
jQuery(elementArray)
elementArray:一个数组,包含一组要包装的DOM元素 jQuery对象。
$( [] )
创建包含在jQuery对象中的空集。
答案 3 :(得分:1)
看起来你指的是以下几行:
var name = $( "#name" ),
email = $( "#email" ),
password = $( "#password" ),
allFields = $( [] ).add( name ).add( email ).add( password )
这里发生的是他们选择了三个元素,现在他们想要创建一个引用所有三个元素的jQuery对象。
除了避免选择器调用之外,它与以下内容相同:
allFields = $("#name, #email, #password")
本质上,他们使用$([])
创建了一个零元素jQuery对象,然后附加了名称,电子邮件和密码,因此最终对象是长度为3的jQuery对象。