id选择器vs输入:文件

时间:2013-12-26 09:17:25

标签: javascript jquery

我刚刚用JQuery遇到了这种奇怪的行为:

我的HTML中有其中一个:

<input type="file" name="pdfUrl" id="pdfUrl" />

这不起作用:

$pdfUrl = $('#pdfUrl');

但是这样做了:

$pdfUrl = $('input:file')[0];

怎么回事?

为了澄清,我的文档中只有一个带有pdfUrl的id。它可能与名称和id有关吗?

运行chrome控制台会显示:

$('#pdfUrl')
[<input type=​"file" name=​"pdfUrl" id=​"pdfUrl">​]

所以这似乎有效。

4 个答案:

答案 0 :(得分:2)

仅包含一个对象的

$("#pdfUrl")返回与$(".rows")相同类型的对象,该对象可能包含数百个DOM对象。这极大地简化了jQuery编程,因为您不必根据从选择器查询返回的对象数量来做不同的事情。

当您引用$('input:file')[0];时,您将进入jQuery对象的DOM对象的内部数组(在选择器查询中填充)并获取该数组中的第一个DOM对象。此时,您有一个普通的DOM对象,而不是一个jQuery对象,您可以使用普通的DOM方法或属性。有时这是必需的(获取实际的DOM对象),但通常,只使用jQuery在jQuery对象上提供的方法更容易。使用它们有很多好处,例如你可以将多个请求链接到大多数方法,它会自动迭代它的内部数组中的所有DOM对象。

<强> Have a look at this

答案 1 :(得分:1)

是的,这是因为id不是唯一的。 pdfUrl也必须是另一个元素的id。

答案 2 :(得分:0)

如果您的html中pdfUrl的ID是唯一的,那么$('#pdfUrl')就可以了。

请检查pdfUrl是否存在重复的ID。

ID必须是唯一的。

答案 3 :(得分:0)

尝试使用:$('[id*=pdfile]')

通常情况是:一个元素获取其父ID,并形成一个更长的ID,如下所示:

GrandParentID:PaarentID:ownID ..

这会导致选择器出现混淆,使用id*=

可以避免这种混淆