2011-08-24 564 views
58

我在noConflict模式下使用jQuery v1.6.1。jQuery ID选择器(“#id”)返回数组

我使用id选择器(如$j("#divID").value)来获取存储项目的值。

不幸的是,$j("#inputID")正在返回一个项目列表,所以我必须使用$j("divID")[0].value来获取对象的值。 [0]似乎没有必要,因为根据定义,只有一个具有任何给定id的html元素。

这是从IDed对象获取值的适当方式吗?或者,还有更好的方法?

谢谢!

+0

您的意思是不是'.val()'? – user113716

+1

如果'#divID'确实指向'div',那么'value'或'.val()'不起作用。只有表单元素具有“价值”属性。 –

+0

好点,@Felix。我纠正了这个问题。 – Richard

回答

93

$j("#divID").val()将工作得很好。

根据jQuery documentation,.val()将返回匹配元素集合中第一个元素的值。

从概念上理解jQuery是如何工作的,以便了解它为什么以这种方式工作是值得的。任何选择器查询的结果都是一个jQuery对象。这就是包含jQuery提供的无数方法的jQuery对象。 .val()是其中一种方法,如.fadeIn(),.hide()等...这些方法不是DOM对象上的方法,而是jQuery对象的方法。由于jQuery对象具有通用性,并且可以在其内部数组中保存0个,1个或多个DOM对象,因此无论结果中是否有0个,1个或多个DOM对象,您都会从jQuery选择器调用中返回相同的jQuery对象。

因此只包含一个对象的$j("#divID")返回与$j(".rows")相同类型的对象,其中可能包含数百个DOM对象。这极大地简化了jQuery编程,因为根据从选择器查询返回的对象数量,您不必采取不同的处理方式。

当您参考$j("divID")[0]时,您将访问jQuery对象内部的DOM对象数组(在选择器查询中填充)并获取该数组中的第一个DOM对象。在这一点上,你有一个正常的DOM对象,而不是一个jQuery对象,你可以使用普通的DOM方法或属性。有时候这是必需的(以获取实际的DOM对象),但通常,使用jQuery在jQuery对象上提供的方法更容易。使用它们有很多优点,例如可以将多个请求链接到大多数方法,并且它会自动遍历其内部数组中的所有DOM对象。

例如,你叫这个:$j("rows-even").hide()并且有20行的那个类,那么所有这些都将被hide()方法操作,没有比这更多的代码。你可以像这样链接多个方法:$j("rows-even").slideUp().slideDown()。在这种情况下,您正在运行动画,并且jQuery将这两个动画链接在一起,当第一个动画完成时自动启动第二个动画。在许多情况下它都非常有用,并且可以节省大量通常必须使用普通JS编写的代码。

+0

太棒了,谢谢! – Richard

+0

+1不错,完整答案。 –

+0

+1很好的答案。 – Usman

3

$j("#divID")返回jQuery对象。为了得到所选元素的值,你必须调用它的val方法来获取值。

使用$j("#divID").val();