.each()和$(this)

时间:2011-09-01 16:39:46

标签: jquery

这是我的代码:

$myDiv = $('<div>1</div>');

$myDiv.each(function () {
    console.log(this.html());
});

它会产生错误,因为this应为$(this)。可是等等。首先不是$myDiv jQuery对象,因此this也必须是jQuery对象。如果是这样,我为什么要将this包裹在$( )内?

6 个答案:

答案 0 :(得分:6)

jQuery对象或多或少是常规DOM元素的数组。 each迭代这些。 this只是一个DOM元素,而$(this)生成一个DOM元素的单元素数组,可以访问jQuery API函数。

答案 1 :(得分:1)

在这种情况下,this实际上是指节点。

$myDiv = $('<div>1</div>');

$myDiv.each(function () {
    console.log(this.innerHTML);
});
// outputs 1

答案 2 :(得分:1)

基本上,作为$()获取的任何内容都成为jQuery添加其辅助方法的数组的一部分,.each()方法实际上迭代了数组中的每个元素。也就是说,它只是元素,而不是具有所有好帮助方法的jQuery数组。

答案 3 :(得分:0)

据我了解,this是一个DOM对象。试试这段代码吧:

$myDiv = $('<div>1</div>'); $myDiv.each(function () { alert(this.nodeName); });

答案 4 :(得分:0)

根据jquery文档,这是$(selector).each()的预期行为 他们甚至给出了一个例子,说明“你想拥有jQuery对象而不是常规DOM元素”:http://api.jquery.com/each/#example-1

答案 5 :(得分:0)

当您在jQuery中创建HTML对象时,它会返回DOM元素。如果你真的想设置你的新dom元素的HTML,你必须像这样调用innerHTML属性:

$myDiv.each(function () {
    console.log(this.innerHTML);
});

这里有关于创建DOM元素的jQUery API的参考:http://api.jquery.com/jQuery/#jQuery2

另外,我不确定你为什么要在刚刚创建的单个元素上调用每个函数?