document.getElementById 与 jQuery $()

IT技术 javascript jquery jquery-selectors
2021-01-13 04:24:34

这是:

var contents = document.getElementById('contents');

与此相同:

var contents = $('#contents');

鉴于 jQuery 已加载?

6个回答

不完全是!!

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

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

在 jQuery 中,要获得与 相同的结果document.getElementById,您可以访问 jQuery 对象并获取该对象中的第一个元素(请记住,JavaScript 对象的行为类似于关联数组)。

var contents = $('#contents')[0]; //returns a HTML DOM Object
这非常有帮助 - 从不知道这一点!不过,我确定我以前确实使用过它,这让我感到困惑。嘿,你每天都学到东西!谢谢!
2021-03-13 04:24:34
如果您的标识符不固定,请小心。$('#'+id)[0]不等于,document.getElementById(id)因为id可能包含在 jQuery 中被特殊处理的字符!
2021-03-14 04:24:34
对于任何感兴趣的人document.getElementBy在 <IE8 中都不能正常工作。它还通过以下方式获取元素,name因此您理论上可以认为document.getElementById不仅具有误导性,而且可能返回不正确的值。我认为@John 是新的,但我认为添加它不会有什么坏处。
2021-03-15 04:24:34
谷歌jquery equivalent of document.getelementbyid和第一个结果是这篇文章。谢谢!!!
2021-03-15 04:24:34
$('#contents')[0].id 返回 ID 名称。
2021-03-15 04:24:34

不。

调用document.getElementById('id')将返回一个原始 DOM 对象。

调用$('#id')将返回一个包含 DOM 对象并提供 jQuery 方法的 jQuery 对象。

因此,您只能像调用css()animate()$()调用时调用 jQuery 方法

您也可以编写$(document.getElementById('id')),它会返回一个 jQuery 对象并且等效于$('#id').

您可以通过编写从 jQuery 对象获取底层 DOM 对象$('#id')[0]

@SLaks 原始 DOM 对象和 jQuery 对象之间的主要区别是什么?只是使用 jQuery 对象我们有能力应用 jQuery 方法吗?
2021-03-21 04:24:34
这个文档JavaScript DOM Objects vs. jQuery Objects看起来很有用。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.
2021-03-28 04:24:34
@Roxy'Pro:它们是不同的对象。jQuery 对象包装 DOM 对象。请参阅文档。
2021-03-29 04:24:34
@IvanIvković:第一个更快,因为它不涉及字符串解析。
2021-04-02 04:24:34
你碰巧知道哪个更快 - $(document.getElementById('element')) vs $('#element')?
2021-04-10 04:24:34

接近,但不一样。他们得到相同的元素,但 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 平均大约200 毫秒(从181ms222ms大约15 runs)。

从这个简单的测试中,您可以看到 jQuery 花费了大约6 倍的时间。

当然,这已经结束了10000迭代,所以在更简单的情况下,我可能会使用 jQuery 以方便使用以及所有其他很酷的东西,比如.animate.fadeTo但是,是的,在技术上getElementById是相当多

感谢您的回答。我想问一下,我应该把所有的都$('#someID') 换成document.getElementById("someID") 吗?我正在研究我广泛使用的东西,$('#someID')并且我的页面对于大文件输入运行缓慢。请建议我应该采取什么行动。
2021-03-28 04:24:34
如果您在同一范围内多次重复使用相同var $myId = $('#myId');的变量,请保存它,例如并重复使用已保存的变量$myId按 id 查找通常是一件非常快的事情,所以如果页面缓慢,可能有不同的原因。
2021-03-28 04:24:34

不。第一个返回一个 DOM 元素,或 null,而第二个总是返回一个 jQuery 对象。如果没有contents匹配id 的元素,则 jQuery 对象将为空

返回的 DOM 元素document.getElementById('contents')允许您执行诸如更改.innerHTML(或.value) 等操作,但是您需要在 jQuery 对象上使用jQuery 方法

var contents = $('#contents').get(0);

更等效,但是如果没有contents匹配id 的元素document.getElementById('contents')将返回 null,但$('#contents').get(0)将返回 undefined。

使用 jQuery 对象的一个​​好处是,如果没有返回任何元素,您将不会收到任何错误,因为始终返回一个对象。但是,如果您尝试对null返回的对象执行操作,则会出现错误document.getElementById