为什么这个Ajax ID选择器返回一个数组?

为什么这个Ajax ID选择器返回一个数组?

问题描述:

根据定义,在一个给定ID的页面上只能有一个控件。为什么这个Ajax ID选择器返回一个数组?

这条语句设置一个控件的值:

document.getElementById("ctl00_phPageContent_dtmVisitChinaFrom_txtSkipValidation").value = "1"; 

为什么 “[0]” 有必要吗?

$("#ctl00_phPageContent_dtmVisitChinaFrom_txtSkipValidation")[0].value = "1"; 
+2

请注意一些HTML?可以通过2个元素具有相同的ID – dotoree 2012-03-04 19:25:40

+0

即使只返回单个结果,jQuery也会返回* array-like *对象。我认为你的例子缺少一个'#'作为元素ID;例如'$( “#ctl00_phPageContent_dtmVisitChinaFrom_txtSkipValidation”)'。 – 2012-03-04 19:25:51

当你这样做:它具有可value财产

$("ctl00_phPageContent_dtmVisitChinaFrom_txtSkipValidation")[0] 

或者

$("ctl00_phPageContent_dtmVisitChinaFrom_txtSkipValidation").get(0) 

您正在访问实际的DOM元素。

,如果你使用jQuery的val()方法,而不是它是没有必要的:当你想没有其他访问元素的本地方法/属性

$("#ctl00_phPageContent_dtmVisitChinaFrom_txtSkipValidation").val('1') 

所以[index]一部分是必要的。

为了一致性。尽管id名义上与单个元素相对应,但其他jQuery选择器可能会返回多个结果。为了保持冷静和可预测性,所有的jQuery结果都集合在一起。

正确的代码:

$("#ctl00_phPageContent_dtmVisitChinaFrom_txtSkipValidation").val() = 1; 

documentation

jQuery对象包含文档对象模型(DOM)已经从HTML字符串创建或选择元素的集合从一个文件。由于jQuery方法通常使用CSS选择器来匹配文档中的元素,因此jQuery对象中的元素集通常称为一组“匹配元素”或“选定元素”。

jQuery对象本身的行为很像一个数组;它有一个length属性,对象中的元素可以通过它们的数字索引[0]到[length-1]进行访问。请注意,一个jQuery对象实际上并不是一个Javascript数组对象,所以它没有像真正的Array对象的所有方法,比如join()。

最相关的部分,你的问题是“设定在一个jQuery对象元素通常被称为一套‘匹配的元素’或‘选定的元素’。

我不不知道你从哪里得到这些代码,但根据我的经验,“[0]”根本不需要。 这个代码行让我好奇的事情是你想用“.value = 1”做什么。 jQuery中的“value”属性由函数运行.val() - http://api.jquery.com/val/