Mir*_*nda 6 jquery jquery-selectors
以下代码行来自官方对话框/ #modal-form示例
allFields = $( [] ).add( name )
Run Code Online (Sandbox Code Playgroud)
有人可以澄清一下是$( [] )做什么的吗?它是一样的$("*")吗?
令我困惑的另一件事是我没有看到allFields被添加/附加到任何/任何对象,它只是被创建和修改.我错过了什么吗?
$([])创建一个空的jQuery对象,就像$().$('*')创建一个jQuery对象,该对象包含与CSS选择器匹配的所有元素*,每个元素都匹配.
换句话说,$([])什么都不做,$('*')得到一切.
如果您查看该函数的 docojQuery()(通常被视为速记版本$()),您会发现它接受几种不同类型和参数组合。
您询问的语法:
$([])
Run Code Online (Sandbox Code Playgroud)
是jQuery( elementArray )允许您传递 DOM 元素数组的语法,其中返回将是包装这些元素的 jQuery 对象。通过传递一个空数组,您基本上会得到一个空的 jQuery 对象(就像传递一个不匹配任何内容的选择器字符串一样,但不会首先尝试查找匹配项,效率低下)。
创建时allFields会添加三个 DOM 元素(其中name、email和password是在其之前创建为每个包含一个 DOM 元素的 jQuery 对象):
allFields = $( [] ).add( name ).add( email ).add( password )
Run Code Online (Sandbox Code Playgroud)
大概添加单个项目而不是仅仅这样做的优点是:
allFields = $("#name,#email,#password")
Run Code Online (Sandbox Code Playgroud)
是每个元素的单独对象也是需要的并且无论如何都会被创建,因此无需费心通过查询字符串重新选择它们。
另一件让我困惑的事情是,我没有看到
allFields被添加/附加到任何地方/任何对象,它只是创建和修改,我是否遗漏了一些东西?
代码中另外两个地方引用了它:
allFields.removeClass( "ui-state-error" );
// and, later
allFields.val( "" ).removeClass( "ui-state-error" );
Run Code Online (Sandbox Code Playgroud)
这是相当标准的 jQuery 用法,用于删除类或设置 jQuery 对象中所有元素的值。无需将其添加到其他对象中。