Javascript 如何从jQuery选择器获取DOM元素?

Javascript 如何从jQuery选择器获取DOM元素?,javascript,jquery,dom,Javascript,Jquery,Dom,我很难从jQuery选择器中找到实际的domeElement 示例代码: <input type="checkbox" id="bob" /> var checkbox = $("#bob").click(function() { //some code } ) 请,我不想这样做: if ( checkbox.eq(0).is(":checked")) //do something 这让

我很难从jQuery选择器中找到实际的
domeElement

示例代码:

<input type="checkbox" id="bob" />
var checkbox = $("#bob").click(function() { //some code  } )
请,我不想这样做:

  if ( checkbox.eq(0).is(":checked"))
    //do something

这让我绕过了复选框,但其他时候我需要真正的
domeElement

您可以通过以下方式访问原始DOM元素:

$("table").get(0);
或者更简单地说:

$("table")[0];
然而,根据我的经验,实际上你并不需要太多的东西。以您的复选框为例:

$(":checkbox").click(function() {
  if ($(this).is(":checked")) {
    // do stuff
  }
});
更“jquery”和(imho)更简洁。如果你想给他们编号呢

$(":checkbox").each(function(i, elem) {
  $(elem).data("index", i);
});
$(":checkbox").click(function() {
  if ($(this).is(":checked") && $(this).data("index") == 0) {
    // do stuff
  }
});

其中一些特性也有助于掩盖浏览器之间的差异。有些属性可能不同。典型的例子是AJAX调用。为了在原始Javascript中正确地实现这一点,如果您需要直接与DOM元素交互,那么对于
XmlHttpRequest

有大约7个回退案例,为什么不直接使用
document.getElementById
,因为如果您试图与特定元素交互,您可能知道id,因为假设类名只在一个元素或其他选项上是有风险的

但是,我倾向于同意其他人的观点,即在大多数情况下,您应该学会使用jQuery提供的东西做您需要的事情,因为它非常灵活

更新:基于评论: 下面是一篇贴子,解释得很好:

如果选中,则返回值;如果未选中,则返回0


$(this).val()
正在进入dom并获取元素的属性“value”,无论是否选中该属性。

Edit:似乎我错误地认为您无法获取元素。正如其他人在此处发布的,您可以通过以下方式获得:

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

我已经验证了这实际上返回了匹配的DOM元素

我需要将元素作为字符串获取

jQuery("#bob").get(0).outerHTML;
这会给你一些类似的东西:

<input type="text" id="bob" value="hello world" />


…作为字符串而不是DOM元素。

谢谢,但是get方法仍然返回jquery元素,而不是DOM元素。否则.checked属性调用会起作用。请在本页的Firebug中尝试
$('a').get(0)。nodeType==1
,它的计算结果是真的还是失败?@BillRob如果get()没有返回DOM元素,则说明有问题。请参阅此处的文档:
$(“”).appendTo('body').get(0).选中
如果要显式使用DOM属性,使用jQuery有什么意义?对于可能出现的类型错误,有一致的防错代码不是更好吗?几年前,我曾是一名精英主义的Ecmascript编写者,并避免使用框架,但我对不一致性了解得越多,最终我就越依赖于它。浏览器引擎只会越来越快,除非速度很明显,否则你不应该真的担心这一点。使用一个框架的全部目的是让可操作的、一致的代码解决许多问题,而不是尽可能快地完成工作。我可以使用document.getElementById或MS-ajax$get方法。由于微软支持jquery,我试图打破对微软ajax javascript的依赖,学习jquery。jquery改变checkbox.val()方法的行为似乎完全违反直觉。与其他每个.val()调用一样,返回表单post字段。jQuery非常适合使用,因此更改val()方法会让人感到困惑,并希望找到一个快速的解决方法。请查看此页面:奇怪的是,val()方法实际上是.attr(“value”)。我想知道为什么他们有两种不同的方法。对我来说,val()是表单post字段的值。@BillRob-jQuery只是简化和标准化了如何获取值,而不必去实际的元素自己去做。有时你需要一个带有ID和父子场景的复杂选择器,你只需一行代码就可以通过jQuery获得它,但是使用document.getElementById需要一天时间。我同意混合库是个坏主意,但这只是偶尔发生的事情,从jquery对象获取DOM元素的任务非常困难,尤其是在.get(0)没有浏览器兼容性的情况下。重复我自己的话,但再次。。。并非在所有浏览器中。在IE7和更早版本中失败。可能需要这样做的一种情况是:在Knockout.js中,函数
applyBindings
需要一个DOM节点,而不是jQuery选择器。这个问题(及其答案)正是我们所需要的。
jQuery("#bob").get(0).outerHTML;
<input type="text" id="bob" value="hello world" />