jQuery - text() 方法?

jQuery - text() method?

作为 jquery 和 javascript 的新手,我似乎无法理解 .text() 方法的真正工作原理。我通读了 jQuery 文档,但仍然无法弄明白。

for (var i=0; i < arrayLength; i++){
        var currentElement = $(".artist")[i];
        var currentArtist = currentElement.text;
        console.log(currentElement);
        console.log(currentArtist);
    }

currentArtist returns "undefined" 在控制台中。它单独在 $(".artist") 上工作正常,但当我使用 [i] 或任何其他与此相关的内容时就不行了。我在这里错过了什么?我还能如何在选择器中获取文本值?

.text() 显示用户可见的 html 元素或一组 html 元素的文本。

var currentArtist = currentElement.text;

应该是:

var currentArtist = currentElement.text();

通过在 jQuery 对象上使用 [] 运算符,您可以访问 jQuery 找到的原始元素节点。这个原始元素不再有 jQuery 方法,也没有 text 属性.

如果您想从 jQuery 对象获取单个元素并保留 jQuery 包装器,请使用 eq 方法。

var artistElement = $(".artist").eq(i);
artistElement.text(); // gets the text content of the element

您发布的代码也不是很优化。例如,在每次循环迭代中,您都在一遍又一遍地搜索文档以查找具有 class artist 的元素。最好在执行循环之前将该搜索结果缓存在一个变量中。如果循环遍历所有 .artist 元素,您可以使用 jQuery 的 each 方法。

$(".artist").each(function () {
    var artist = $(this); // this poits to the raw element thus wrapping into jQuery object
    console.log(artist.text());
});

你应该使用 each():

$(".artist").each(function(i,val){

    var currentArtist = $(val).text();
    console.log(val);
    console.log(currentArtist);
});

$(".artist") 生成一个 jQuery 对象,可能是这样的:

[div, div, div, div, prevObject: jQuery.fn.jQuery.init, context: document, selector: ".artist"...]

所以 $(".artist")[i] 的结果是 HTMLElement 并且没有 text 方法,这就是为什么你得到 undefined

另外text()是一个函数,后面可以跟()

但是如果你想保留 for 循环,你可以这样做

for (var i=0; i < arrayLength; i++){
    var currentElement = $(".artist")[i];
    var currentArtist = $(currentElement).text();
    console.log(currentElement);
    console.log(currentArtist);
}