getElementById和JQuery没有返回相同的结果

时间:2011-07-11 12:24:48

标签: javascript forms google-chrome internet-explorer-8 jquery-selectors

当我使用JQuery vs javascript函数时,我得不到相同的结果。

这是HTML

<form id="testform">
  <div id="FormContainerID"></div>
  <input type="button" id="y" value="Button" />
  <div id="ListContainerID"></div>
</form>

这是Javascript

01   var Form = document.getElementById('y').form;
02 //var Form = $('#y').closest('form');
03   alert(Form);

当激活第1行时,我获得了一个合法的表单对象。警报说“对象HTMLFormElement”,一切正常。

但是如果我使用第02行代替,那么Alert会说“对象对象”,然后我会因为它不是真正的Form对象而得到错误。

为什么JQuery没有返回正确的对象? 我在Chrome和IE8上获得了相同的结果。

[编辑]
我正在使用JQuery版本:jquery-1.5.1.min

[溶液]
谢谢你清除它。我将代码更改为:

var Form = $('#'+fChildID).closest('form')[0];

......现在它充当了魅力 Vivek Goel是第一个回答的人,所以对他很有信心。我投票给你了解解JQuery实例模型的其他人。

谢谢。

4 个答案:

答案 0 :(得分:4)

jQuery在您使用它查找事物时返回jQuery实例,而不是原始DOM元素。 jQuery实例是匹配元素集的包装器,允许您将基于集合的操作应用于元素。这是使用jQuery的绝对基础之一。

如果您喜欢使用类似数组的表示法,您也可以访问原始元素 - [0][1]等,最多.length - 1。所以在你的情况下,由于你只得到一个元素,它将是Form[0]。如果您的代码与多个表单元素匹配,则第二个表单元素为Form[1],第三个表单元素为Form[2]等。(在文档中很难找到使用[]表示法但是,在我看来,其中一个差距;在过去你使用了get方法,但是如果你对负索引使用它的特殊处理,你现在只需要它。)

您根本不需要访问原始元素。你没有说过一旦你拥有它就会对你做什么,但是如果你(比如说)提交它,只需调用submit实例上的jQuery函数,它会提交表格。如果你想从中获取一个属性,那就是attr jQuery函数(例如,val = Form.attr("action"))。

jQuery是基于集合的,但它是不对称的,起初感觉很奇怪但在实践中运作得相当好。当获取值时,函数通常仅从第一个匹配元素中获取值。当设置一个值时,函数通常将其设置在 all 匹配的元素上。

答案 1 :(得分:2)

这是因为jquery语句返回的是jquery对象而不是表单对象。 你需要像Form [0]这样的东西来访问表单元素。

答案 2 :(得分:1)

使用jquery

 alert(Form[0]);

http://jsfiddle.net/dvCtr/

答案 3 :(得分:0)

尝试

  

var form = $(“#y”)。parent

这应该返回DOM树中y的父