jQuery方法和DOM属性

12

当我使用jQuery对象时,我不确定何时可以使用DOM属性,何时可以使用jQuery方法。比如,我使用了一个选择器。

var $elemSel = $('#myDiv').find('[id *= \'select\']')

此时,$elemSel是一个jQuery对象,我知道它是DOM元素数组的封装。如果我遍历$elemSel对象/数组,我可以获取对DOM元素的引用(是吗?)

我的问题: 1. 有没有办法将$elemSel转换为非jQuery的普通DOM元素数组? 2. 我能同时使用DOM属性和jQuery方法吗(类似于这样)

$elemSel.children('td').nodeName

(nodeName是DOM相关的,children是JQuery相关的)

编辑:这有什么问题吗?

$elemSel.get(0).is(':checked')

编辑2:

谢谢大家的回答,我现在明白可以使用 get(0) 方法获取 DOM 元素。以下是一些附加问题:

  1. 如何将 DOM 元素转换为 JQuery 对象?

  2. 如果我将“this”分配给一个变量,那么这个新变量是 DOM 还是 JQuery?如果是 JQuery,如何将其转换为 DOM 元素?(因为无法使用 get(0))

    var $elemTd = $(this);

  3. 当我像上面那样进行赋值时,我看到一些代码示例没有在变量名前面包含$符号,为什么?

  4. 至于我的原始问题,我能否同时在 JQuery 对象上混合使用 DOM 属性和 JQuery 函数?

    $elemSel.children('td').nodeName

4个回答

24
你需要使用 .get(0) 来获取 DOM 就绪对象。
var myBox = $("div#myBox");
alert(myBox.get(0).id); // "myBox"

阅读 Cody Lindley 的文章 "Peeling Away the jQuery Wrapper and Finding an Array"。


回复 Edit: .is() 不是原生的 JavaScript 方法。当你运行 .get(0) 时,你不再使用 jQuery 对象,因此不能期望从中运行 jQuery 方法。

如果你想在特定结果上运行 .is(),使用 :eq(index) 选择器.eq(index) 方法

$("div:eq(1)").is(":checked"); // gets second div
$("div").eq(1).is(":checked"); // gets second div

关于编辑 #2

Bob,你应该创建新的问题,而不是在这里问更多的问题。

将DOM元素转换为jQuery对象是通过将其传递到选择器中实现的:

var myBox = document.createElement("div");
var myBoxJQ = $(myBox);

This 赋值给一个变量。这取决于你何时进行。如果 "this" 是指一个 jQuery 对象,那么 this 将是一个 jQuery 对象。您可以通过在 this 后面加上 .get(0) 来进行转换。

this 指的是一个 jQuery 对象时,您不需要把它包装在 $() 中。这是多余的。

最后,$elemSel.children('td').nodeName 可以这样做:$elemSel.children('td')[0].nodeName 或者 $elemSel.children('td').get(0).nodeName,其中 0 是要访问哪个项的索引。


谢谢解释。那么,如果我想使用Jquery对象的单个元素并在它们上运行Jquery方法,我必须使用“each”吗?还有其他方法吗? - Bob Smith
jQuery对象是一个数组。因此,您可以像处理数组一样处理jQuery对象的每个实例。访问该数组中的第一个项目以在其上运行您的本地JavaScript方法。 - Sampson
我可以请求你查看一个关于不同主题的jQuery问题吗?链接在这里:http://stackoverflow.com/questions/13137404/jquery-find-div-class-name-at-a-certain-position-while-scrolling? - Istiaque Ahmed

2

1

由于jQuery选择器中可能有多个匹配项,因此您需要从“数组”中获取元素。

您可以使用get方法返回单个DOM元素或DOM元素数组。

例如:

var elims = $("div").get();
for(var i in elims)
    alert(elims[i].nodeName);

编辑:

$elemSel.get(0).is(':checked') 不起作用,因为你获取的是 Dom 对象,然后尝试在其上使用 jQuery 函数。如果你想要获取单个 jQuery 元素,请使用 eq

$elemSel.eq(0).is(':checked');

0
为了调用本地DOM方法,您可以使用get(index)方法。或者,如果您想使用jQuery对象方法,则应使用jQuery将本机DOM元素包装起来,这将把DOM元素转换为jQuery对象,以便所有方法都可用。 http://www.linxinshan.com/?p=339

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接