jQuery $()与document.getElementByID - 差异

时间:2011-04-22 15:22:28

标签: jquery jquery-selectors

  

可能重复:
  document.getElementById vs jQuery

更多jQuery新手对你们造成伤害......

我有一些代码正在或多或少地使用jQuery。我的困惑在于,在一个案例中,我得到了一个标识符,该标识符是页面上div的ID。我希望$(theIdentifier)能够抓住这个对象,但事实并非如此; console.log返回'undefined'。但是,document.getElementById(theIdentifier)成功 - 它返回我正在寻找的东西,并且对div的进一步操作按预期工作。

这里有什么?它们不应该相同吗?为什么jQuery版本不工作?

显然很困惑;谢谢你的建议!

4 个答案:

答案 0 :(得分:6)

“$()”的参数必须是选择器

var $thing = $("#" + thingId);

几乎与调用“getElementById()”相同。不同之处在于后者将关注“id”值(IE中除外,见下文),而基于jQuery选择器的代码将关注嵌入式CSS元字符。因此,如果你有一个带有“。”的“id”值。在其中,像这样:

var foo = $('#thing.special');

然后将查找id为“thing”和class“special”的元素,而不是id为“thing.special”的元素。

IE的问题:由于只有微软的一些神秘开发人员知道的原因,IE中的“getElementById()”代码将返回其“name”属性与参数匹配的元素。该行为不依赖于具有相同“id”值的元素的存在;我认为它返回它在DOM中找到的第一个。 (在这方面我不了解IE9。)

注意 - 注释正确地提到“$()”函数可以采用各种不同类型的参数,从而产生各种效果。当我说它“必须是一个选择器”时,我指的是它与字符串值参数的使用。

答案 1 :(得分:1)

你需要$('#'+ theIdentifier)来获取ID总是#在开头。

答案 2 :(得分:0)

$接受CSS选择器,而不是标识符 所以它是:

$('#' + identifier)

答案 3 :(得分:0)

var el = document.getElementById('foo')
$(el)...

相当于:

$('#foo')...