jQuery 选择器 return 是什么类型的对象?

What kind of object does a jQuery selector return?

我正在尝试获取 "li" 个元素中的 html 个,并以字符串形式提醒它们。

HTML:

<ul>
    <li>lorem ipsum dolor <span>sit</span> amet 1</li>
    <li>lorem ipsum dolor <span>sit</span> amet 2</li>
    <li>lorem ipsum dolor <span>sit</span> amet 3</li>
    <li>lorem ipsum dolor <span>sit</span> amet 4</li>
    <li>lorem ipsum dolor <span>sit</span> amet 5</li>
    <li>lorem ipsum dolor <span>sit</span> amet 6</li>
</ul>

<p id="greeting">Hello <strong>World</strong>!</p>

Javascript:

$(document).ready(function(e){
    var list =  $("li");
    var greeting = $("#greeting");
    var content ="";
    for(var i=0, len = list.length; i<len; i++) {
        content += $(list[i]).html();   
        //why do I have to use the $ here instead of just doing list[i].html()

      //content += list[i].html(); why does this not work?
    }
    alert(content);
    alert(greeting.html());  //why does this work without the $ ?
});

我做了一些研究,了解到 jQuery 选择器 return DOM 元素包裹在 jQuery 对象中,这样我们就可以应用 jQuery 方法但是为什么 greeting.html() 行在没有 $ 的情况下工作正常?

TypeError: list[i].html 不是函数

为什么我在执行 list[i].html 而不是 $(list[i]).html() 时会出现此错误?

这里是 fiddle.

jQuery 选择return 一个jQuery 选择集(一个"jQuery object")。该对象也是一个 "array like" 对象,这意味着您可以像示例中那样通过索引器表示法访问选择。

选择集中的个元素dom个元素,而不是jQuery个选择集本身。如果要将 DOM 元素转换为 jQuery 选择集,则需要将其包装在 $(yourElement) 中。

var jQ = $("div"); // get all divs
jQ[0]; // the first div, a DOMElement
$(jQ[0]); // a selection containing the first div of the old selection
jQ.eq(0); // convenience for the above. 

API这样做的原因是为了效率,如果你选择了10000个div,创建10000个新对象是浪费的。

它们存储为 HTMLElement 数组,包装为 单个 jQuery 对象。

如果你想获得一个元素,你可以使用 .eq():

content += list.eq(i).html();  

登录$("li")你就明白了。

它是 jQuery 对象中 DOM 元素的集合,当您使用 $("li")[i] 时,它会得到一个 DOM 元素返回存储在 jQuery 对象,您可以在家中使用 list[i].innerHTML 获取 html 而无需转换回 jQuery 对象,就像使用普通的 Javascript 选定元素一样。