0

我没有得到相同的结果,当我使用JQuery与JavaScript函数。getElementById和JQuery不返回相同的结果

这是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行,警报说“对象对象”,然后我当然会得到错误,因为它不是一个真正的窗体对象。

为什么JQuery不返回正确的对象? 我得到了与Chrome和IE8相同的结果。

[编辑]
我使用jQuery版本:jQuery的1.5.1.min

[解决方法]
感谢您清除此了。我改变了代码:

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

...现在它可以作为一个魅力。
Vivek Goel是第一个回答,因此声称他。我向其他人解释了JQuery实例模型。

谢谢。

回答

1

与jQuery使用

alert(Form[0]); 

http://jsfiddle.net/dvCtr/

+0

我找不到任何关于.closest()的文档应该返回一个数组。它总是返回一个数组,还是我误解了一些基本的东西? –

+1

@Max:它不是一个数组,它是一个'jQuery'实例(一个通过'jQuery.fn.init'构造函数创建的对象),它是一组DOM元素的包装器。是的,jQuery * always *返回一个'jQuery'实例,无论是否有零匹配元素,一个或1,000(或更多)。 –

4

,当你用它来看事情,而不是原始的DOM元素的jQuery返回jQuery实例。 jQuery实例是一组匹配元素的包装,并允许您将基于集合的操作应用到元素。这是使用jQuery的绝对基础之一。

您也可以访问,如果你的原始元素,如使用阵列状的符号  — [0][1]等,多达.length - 1。所以在你的情况下,因为你只有一个元素,它将是Form[0]。如果您的代码与多个表单元素相匹配,那么第二个代码将是Form[1],第三个代码是Form[2],等等(使用[]表示法在文档中令人惊讶地很难找到,尽管这是我认为的一个缺陷;在你过去使用get方法,但你现在只需要使用它的特殊处理负指数。)

你经常不需要访问原始元素。你没有说明一旦你有了表单,你会怎么做,但是如果你要(比如说)提交它,只需拨打jQuery实例上的submit函数,它就会提交表单。如果您想从中获取属性,则可以使用attr jQuery函数(例如,val = Form.attr("action"))。

jQuery是非常基于集合的,但它是不对称的,起初感觉不可思议,但在实践中运行良好。当得到 a值时,函数通常仅从第一个获得匹配元素的值。当设置为 a值时,函数通常将其设置为全部的匹配元素。

0

尝试

变种形式= $( “#Y”)。父

,应返回的y父DOM树

+0

'parent'是一个函数,而不是一个属性。而且,你正在改变他的代码,但不是 - 在尊重的情况下 - 有用(因为'parent()'*也*返回一个jQuery对象,而不是原始DOM元素,就像'nearest()'一样)。也许他想变得灵活一些,并允许设计师在表单和输入元素之间添加额外的层。 –

2

这是因为jQuery的声明返回一个jquery对象而不是一个表单对象。 你需要类似Form [0]的东西来访问表单元素。

+0

根据[文档](http://api.jquery.com/closest/): >给定一个代表一组DOM元素的jQuery对象,.closest()方法允许我们搜索这些元素并他们的祖先在DOM树中,并从匹配元素中构造**一个新的jQuery对象**。 – Vlad

相关问题