如何从JQuery选择器获取DOM元素

Bil*_*Rob 172 javascript jquery dom

我很难找到从jquery选择器获取实际的DOMElement.示例代码:

<input type="checkbox" id="bob" />
  var checkbox = $("#bob").click(function() { //some code  } )
Run Code Online (Sandbox Code Playgroud)

在另一段代码中,我正在尝试确定复选框的选中值.

  if ( checkbox.eq(0).SomeMethodToGetARealDomElement().checked )
    //do something.
Run Code Online (Sandbox Code Playgroud)

请,我不想这样做:

  if ( checkbox.eq(0).is(":checked"))
    //do something
Run Code Online (Sandbox Code Playgroud)

这让我在复选框周围,但有时我需要真正的DOMElement.

cle*_*tus 261

您可以使用以下命令访问原始DOM元素:

$("table").get(0);
Run Code Online (Sandbox Code Playgroud)

或更简单地说:

$("table")[0];
Run Code Online (Sandbox Code Playgroud)

实际上并没有很多你需要这个(根据我的经验).拿你的复选框示例:

$(":checkbox").click(function() {
  if ($(this).is(":checked")) {
    // do stuff
  }
});
Run Code Online (Sandbox Code Playgroud)

更加"jquery'ish"和(imho)更简洁.如果你想给它们编号怎么办?

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

其中一些功能也有助于掩盖浏览器的差异.某些属性可能不同.经典的例子是AJAX调用.要在原始Javascript中正确执行此操作,有大约7个回退案例XmlHttpRequest.

  • 如果您要明确使用DOM属性,那么使用jQuery有什么意义呢?拥有一致的代码以防止可能的TypeErrors出错是不是更好?几年前,我曾经是一个精英主义的ECMAScripter并且避免使用框架,但是我越了解不一致性,我就越来越依赖.浏览器引擎变得越来越快,除非速度明显,否则你不应该担心这一点.使用框架的全部意义在于提供可行的一致代码来解决许多问题,而不是尽可能快地完成任务. (5认同)

edu*_*911 7

编辑:似乎我错了,假设你无法获得元素.正如其他人在这里发布的那样,你可以得到它:

$('#element').get(0);
Run Code Online (Sandbox Code Playgroud)

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

  • 重复自己,但再次......不是在所有浏览器中.在IE7及更早版本中失败. (2认同)

Cha*_*ock 6

我需要将元素作为字符串.

jQuery("#bob").get(0).outerHTML;
Run Code Online (Sandbox Code Playgroud)

哪个会给你这样的东西:

<input type="text" id="bob" value="hello world" />
Run Code Online (Sandbox Code Playgroud)

...作为字符串而不是DOM元素.