【发布时间】:2012-01-30 12:27:59
【问题描述】:
以下这行代码来自官方dialog/#modal-form example
allFields = $( [] ).add( name )
有人可以澄清$( [] ) 的作用吗?和$("*")一样吗?
让我感到困惑的另一件事是我没有看到allFields 被添加/附加到任何地方/任何对象,它只是被创建和修改。我错过了什么吗?
【问题讨论】:
以下这行代码来自官方dialog/#modal-form example
allFields = $( [] ).add( name )
有人可以澄清$( [] ) 的作用吗?和$("*")一样吗?
让我感到困惑的另一件事是我没有看到allFields 被添加/附加到任何地方/任何对象,它只是被创建和修改。我错过了什么吗?
【问题讨论】:
$([]) 创建一个空的 jQuery 对象,就像$() 一样。 $('*') 创建一个 jQuery 对象,其中包含与 CSS 选择器 * 匹配的所有元素,每个元素都将匹配。
换句话说,$([]) 什么都得不到,$('*') 什么都得到。
【讨论】:
如果您查看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 对象中所有元素的值。无需将其添加到其他对象。
【讨论】:
jQuery(元素数组)
elementArray: 一个包含一组 DOM 元素的数组,这些元素包含在一个 jQuery 对象。
$( [] ) 创建一个包装在 jQuery 对象中的空集。
【讨论】:
您似乎指的是以下几行:
var name = $( "#name" ),
email = $( "#email" ),
password = $( "#password" ),
allFields = $( [] ).add( name ).add( email ).add( password )
这里发生的事情是他们选择了三个元素,现在他们想要创建一个引用所有三个元素的 jQuery 对象。
这与以下相同,只是它们避免了选择器调用:
allFields = $("#name, #email, #password")
本质上,他们创建了一个零元素 jQuery 对象,然后添加了 $([])、名称、电子邮件和密码,因此最终对象是长度为 3 的 jQuery 对象。
【讨论】: