这是:
var contents = document.getElementById('contents');
与此相同:
var contents = $('#contents');
鉴于jQuery已加载?
这是:
var contents = document.getElementById('contents');
与此相同:
var contents = $('#contents');
鉴于jQuery已加载?
Answers:
不完全是!!
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
document.getElementBy
,在<IE8中无法正常工作。它也可以获取元素,name
因此从理论上讲,您不仅可以说document.getElementById
是误导,而且可以返回不正确的值。我认为@John是新的,但我认为添加它不会有任何伤害
$('#'+id)[0]
不等于,document.getElementById(id)
因为id
可能包含在jQuery中被特殊对待的字符!
jquery equivalent of document.getelementbyid
,第一个结果是这篇文章。谢谢!!!
$('#contents')[0].id
返回ID名称。
没有。
调用document.getElementById('id')
将返回原始DOM对象。
调用$('#id')
将返回一个包装DOM对象并提供jQuery方法的jQuery对象。
因此,您只能调用jQuery方法,例如css()
或animate()
在$()
通话。
您还可以编写$(document.getElementById('id'))
,它将返回一个jQuery对象,它等效于$('#id')
。
您可以通过编写从jQuery对象获取基础DOM对象$('#id')[0]
。
In one sentence, DOM objects are the objects that the web browser is using to render elements on the web page whereas jQuery objects are basically wrapper objects around a set of DOM elements.
关于速度差异的注释。将以下代码片段附加到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平均大约200毫秒(从
181ms
到222ms
大约15 runs
)。从这个简单的测试中,您可以看到jQuery花费了大约6倍的时间。
当然,这是在10000
迭代中完成的,因此在更简单的情况下,我可能会使用jQuery来简化易用性,并使用所有其他很酷的功能(例如.animate
和).fadeTo
。但是,是的,从技术上讲getElementById
要快得多。
$('#someID')
用document.getElementById("someID")
?我正在做一些我已经广泛使用的工作,$('#someID')
并且对于大文件输入,我的页面运行缓慢。请建议我应该怎么做。
var $myId = $('#myId');
变量,则将其保存,例如,然后重复使用保存的变量$myId
。通过id查找通常是一件相当快的事情,因此,如果页面缓慢,则可能有不同的原因。
否。第一个返回DOM元素,或者为null,而第二个总是返回jQuery对象。如果没有ID为的元素,则jQuery对象将为空contents
匹配。
返回的DOM元素document.getElementById('contents')
允许您执行诸如更改.innerHTML
(或.value
)等操作,但是您需要在jQuery Object上使用jQuery方法。
var contents = $('#contents').get(0);
更为对等,但是如果没有contents
匹配ID为的元素,document.getElementById('contents')
则将返回null,但是$('#contents').get(0)
将返回undefined。
使用jQuery对象的一个好处是,如果不返回任何元素,则不会出现任何错误,因为始终会返回一个对象。但是,如果您尝试对null
返回的进行操作,则会收到错误消息document.getElementById
万一有人碰到这个……这是另一个区别:
如果id包含HTML标准不支持的字符(请参见此处的 SO问题),那么即使getElementById可以,jQuery可能也找不到它。
这是使用Chrome浏览器通过一个包含“ /”字符(例如:id =“ a / b / c”)的ID发生的:
var contents = document.getElementById('a/b/c');
能够找到我的元素,但是:
var contents = $('#a/b/c');
没有。
顺便说一句,简单的解决方法是将该ID移到名称字段。jQuery可以使用以下方法轻松找到元素:
var contents = $('.myclass[name='a/b/c']);
var contents = document.getElementById('contents');
var contents = $('#contents');
代码段不相同。第一个返回一个Element
对象(source)。第二个,等效的jQuery将返回一个jQuery对象,其中包含零个或一个DOM元素的集合。(jQuery文档)。jQuery内部document.getElementById()
用于提高效率。
在这两种情况下,如果找到多个元素,则仅返回第一个元素。
当检查jQuery的github项目时,我发现以下几行代码片段似乎在使用document.getElementById代码(https://github.com/jquery/jquery/blob/master/src/core/init.js第68行及以上)
// HANDLE: $(#id)
} else {
elem = document.getElementById( match[2] );
另一个区别: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。jQuery的选择性可以帮助您。
我开发了一个用于在Web浏览器中存储DOM树的noSQL数据库,该数据库中对页面上所有DOM元素的引用都存储在简短索引中。因此,不需要函数“ getElementById()”来获取/修改元素。当在页面上实例化DOM树中的元素时,数据库将为每个元素分配代理主键。这是一个免费工具http://js2dx.com
以上所有答案都是正确的。万一您希望看到它的实际效果,请不要忘记在浏览器中安装了Console,在其中您可以清楚地看到实际结果:
我有一个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
截止到2019年,所有答案今天都是陈旧的,您可以直接使用javascript直接访问id键控filds
<p id="mytext"></p>
<script>mytext.innerText = 'Yes that works!'</script>