2011-08-12 87 views
1

我刚刚开始使用JQuery,并通过tutorial vid工作。在某一时刻,演示者将使用JavaScript代替JQuery选择器。只是想知道为什么下面的javascript getElementById在将对象传递给函数时工作正常,但第二个不行?JQuery通过ID选择vs document.GetElementByID

谢谢!

// works 
addTask(document.getElementById('taskText'), evt); 

// doesn't 
addTask($('#taskText'), evt); 
+0

现在我们需要去猜测什么的'addTask',右:

认为它是从零开始的数组,你可以通过这样的DOM元素通过? – zerkms

+0

我的想法是它没有什么区别 - 它接受一个对象和一个事件。我可以发布它。 – Glinkot

+0

显然,如果你的函数确实接受一个对象,并且不接受另一个对象 - 那么问题是与该函数;-) – zerkms

回答

9

getElementById()返回DOM元素引用。

jQuery的选择器返回一个jQuery对象。您可以使用

$('#taskText').get(0); 

http://api.jquery.com/get/

+0

谢谢你。我不知道DOM和Jquery对象之间是有区别的。谢谢! – Glinkot

1

$('#taskText')返回一个jQuery对象引用得到jQuery对象的元素引用。

document.getElementById('taskText')返回一个DOM元素引用。

如果你的addTask()函数不知道如何将它们转换为它所需要的,那么这将是问题,因为它们中的一个将需要转换。

如果你想从jQuery对象第一个DOM元素的引用,你可以用这个做:

$('#taskText').get(0) 

所以这两个应该是相同的:

$('#taskText').get(0) 
document.getElementById('taskText') 
+0

谢谢,听起来不错。 – Glinkot

4

为了增加另一个答案,关于结果,如果你想使用jQuery(这更容易阅读),你可以直接得到dom节点,如下所示:

addTask($('#taskText')[0], evt); 
+1

+1忘了那个。它也在'get()'page – Phil

+0

感谢那Overzealous。 – Glinkot

0

两者都不是完全相同

document.getElementById('taskText'); //returns a HTML DOM Object 

var contents = $('#taskText'); //returns a jQuery Object 

var contents = $('#taskText')[0]; //returns a HTML DOM Object 

所以你必须改变它来获取HTML DOM对象

addTask($('#taskText')[0], evt); 
+0

感谢pramendra – Glinkot

0

由于@Phil和@ jfriend00人士指出,的document.getElementById( 'taskText')是一个DOM元素和$('#taskText')是一个jQuery对象。后者是与选择器匹配的所有DOM元素的对象。

addTask($('#taskText')[0], evt); 
+0

为什么投下了票?解释会更合适 – Ruxta

+0

只是在这里猜测,但你所有的答案是备份其他答案。这可能是一个评论,说“+1” – Phil

+0

当我写这些时,这些评论没有发布。也许我会给他们+1更快的打字技巧;) – Ruxta