这是:
var contents = document.getElementById('contents');
与此相同:
var contents = $('#contents');
鉴于jQuery已加载?
不完全是!!
document.getElementById('contents'); //returns a HTML DOM Object
var contents = $('#contents'); //returns a jQuery Object
在jQuery中,为了获得与document.getElementById
相同的结果,您可以访问jQuery Object并获取对象中的第一个元素(记住JavaScript对象的行为类似于关联数组)。
var contents = $('#contents')[0]; //returns a HTML DOM Object
另一个区别是:getElementById
返回第一个匹配,而$('#...')
返回匹配集合 - 是的,可以在HTML文档中重复相同的ID。
此外,从文档中调用getElementId
,而从选择器调用$('#...')
。因此,在下面的代码中,document.getElementById('content')
将返回整个身体,但$('form #content')[0]
将返回到窗体内部。
<body id="content">
<h1>Header!</h1>
<form>
<div id="content"> My Form </div>
</form>
</body>
使用重复的ID可能看起来很奇怪,但如果您使用的是Wordpress,模板或插件可能会使用与您在内容中使用的ID相同的ID。 jQuery的选择性可以帮助你。
jQuery是基于JavaScript构建的。这意味着它无论如何都只是javascript。
的document.getElementById()
document.getElementById()方法返回具有指定值的ID属性的元素,如果不存在具有指定ID的元素,则返回null。在页面中ID应该是唯一的。
Jquery $()
使用id选择器作为参数调用jQuery()或$()将返回一个包含零个或一个DOM元素集合的jQuery对象。每个id值必须在文档中只使用一次。如果为多个元素分配了相同的ID,则使用该ID的查询将仅选择DOM中的第一个匹配元素。
我开发了一个用于在Web浏览器中存储DOM树的noSQL数据库,其中对页面上所有DOM元素的引用存储在一个短索引中。因此,获取/修改元素不需要函数“getElementById()”。当DOM树中的元素在页面上实例化时,数据库会为每个元素分配代理主键。这是一个免费的工具http://js2dx.com
以上所有答案都是正确的。如果你想看到它的实际效果,不要忘记你在浏览器中有控制台,你可以看到实际结果清晰:
我有一个HTML:
<div id="contents"></div>
转到控制台(cntrl+shift+c)
并使用这些命令清楚地查看结果
document.getElementById('contents')
>>> div#contents
$('#contents')
>>> [div#contents,
context: document,
selector: "#contents",
jquery: "1.10.1",
constructor: function,
init: function …]
我们可以看到,在第一种情况下,我们得到了标签本身(严格来说,就是HTMLDivElement对象)。在后者中,我们实际上没有普通对象,而是一个对象数组。如上面的其他答案所述,您可以使用以下命令:
$('#contents')[0]
>>> div#contents
没有。
调用document.getElementById('id')
将返回一个原始DOM对象。
调用$('#id')
将返回一个包装DOM对象并提供jQuery方法的jQuery对象。
因此,您只能在css()
调用中调用jaz方法,如animate()
或$()
。
您也可以编写$(document.getElementById('id'))
,它将返回一个jQuery对象,相当于$('#id')
。
您可以通过编写$('#id')[0]
从jQuery对象获取底层DOM对象。
关闭,但不一样。他们获得相同的元素,但jQuery版本包含在jQuery对象中。
相当于此
var contents = $('#contents').get(0);
或这个
var contents = $('#contents')[0];
这些将把元素从jQuery对象中拉出来。
关于速度差异的说明。将以下代码段附加到onclick调用:
function myfunc()
{
var timer = new Date();
for(var i = 0; i < 10000; i++)
{
//document.getElementById('myID');
$('#myID')[0];
}
console.log('timer: ' + (new Date() - timer));
}
替代评论一个,然后评论另一个。在我的测试中,
document.getElementbyId平均约为35ms(从
25ms
到52ms
的波动,大约是15 runs
)
另一方面,
jQuery平均大约200ms(从
181ms
到222ms
,大约是15 runs
)。从这个简单的测试中你可以看到jQuery花了大约6倍的时间。
当然,这是在10000
迭代,所以在一个更简单的情况下,我可能会使用jQuery易于使用和所有其他很酷的东西,如.animate
和.fadeTo
。但是,从技术上来说,getElementById
要快得多。
不。第一个返回DOM元素,或null,而第二个返回一个jQuery对象。如果没有匹配id为contents
的元素,jQuery对象将为空。
document.getElementById('contents')
返回的DOM元素允许你做一些事情,比如更改.innerHTML
(或.value
)等,但是你需要在jQuery对象上使用jQuery methods。
var contents = $('#contents').get(0);
更等效,但如果没有匹配contents
的id的元素,document.getElementById('contents')
将返回null,但$('#contents').get(0)
将返回undefined。
使用jQuery对象的一个好处是,如果没有返回任何元素,您将不会收到任何错误,因为始终返回一个对象。但是,如果您尝试对null
返回的document.getElementById
执行操作,则会出错
不,实际上同样的结果是:
$('#contents')[0]
jQuery不知道从查询中返回多少结果。你得到的是一个特殊的jQuery对象,它是与查询匹配的所有控件的集合。
使jQuery变得如此方便的一部分原因是调用此对象的MOST方法看起来像是用于一个控件,实际上是在一个循环调用所有成员的集合中
当您使用[0]语法时,您将从内部集合中获取第一个元素。此时,您将获得一个DOM对象
如果其他人遇到这个...这是另一个区别:
如果id包含HTML标准不支持的字符(请参阅SO问题here),那么即使getElementById,jQuery也可能找不到它。
使用Chrome时,我发现我的ID包含“/”字符(例如:id =“a / b / c”):
var contents = document.getElementById('a/b/c');
能够找到我的元素但是:
var contents = $('#a/b/c');
没有。
之间,简单的解决方法是将id移动到name字段。使用JQuery查找元素没有问题:
var contents = $('.myclass[name='a/b/c']);
就像大多数人所说的那样,主要区别在于它使用jQuery调用包装在jQuery对象中,而使用直接JavaScript包含原始DOM对象。 jQuery对象当然可以用它做其他jQuery函数,但是,如果你只需要做基本样式或基本事件处理之类的简单DOM操作,直接的JavaScript方法总是比jQuery快一点,因为你不要必须加载在JavaScript上构建的外部代码库。它节省了额外的一步。
var contents = document.getElementById('contents');
var contents = $('#contents');
代码片段不一样。第一个返回一个Element
对象(source)。第二个,jQuery等价物将返回一个包含零个或一个DOM元素集合的jQuery对象。 (jQuery documentation)。在内部jQuery使用document.getElementById()
来提高效率。
在这两种情况下,如果找到多个元素,则只返回第一个元素。
当检查github项目的jQuery时,我发现以下行代码片段似乎使用了document.getElementById代码(https://github.com/jquery/jquery/blob/master/src/core/init.js第68行)
// HANDLE: $(#id)
} else {
elem = document.getElementById( match[2] );