假设我们有以下内容:
<p class="first">This is paragraph 1.</p>
<p class="second">This is paragraph 2.</p>
<p id="third">This is paragraph 3.</p>
<p>This is paragraph 4.</p>
我们可以在value
变量中保存元素的值并显示如下。
var value = $('p').slice(3,4);
value.text(); // result --> This is paragraph 4
如果我们知道元素的数量,上面的方法没有问题,但如果我们有很多元素并且我们想要进行循环,那么我们就会遇到问题。如果我喜欢这个,为什么我会收到错误?
$('p')[3].text();
如果我想循环并获取值,我该怎么办?
答案 0 :(得分:2)
像这样循环:
$('p').each(function(i) {
alert($(this).text());
//or this:
alert($('p').eq(i).text());
});
执行[3]
时,你得到的是DOM元素<p>
,而不是jQuery对象,它有.text()
方法。
$('p')[3] == DOM Element, doesn't have `.text()`
$('p').eq(3) == jQuery object, has `.text()`
答案 1 :(得分:1)
jQuery对象可以作为DOM元素的数组,而不是其他jQuery对象
因此,编写$(...)[3]
会为您提供原始DOM元素,而不是jQuery对象。
您需要调用eq
函数:
$('p').eq(3).text();
答案 2 :(得分:1)
您尝试执行的操作的问题是$('p')[3]
不会返回jQuery对象,因此它没有text()
函数。
相反,请使用以下内容:
$('p.eq(3)')
// OR
$('p').eq(3)
一般的经验法则是,如果你不确定一个对象是否有任何jQuery方法,你可能只需将它包装在$(...)
或jQuery(...)
中,后者如果您使用jQuery.noConflict();
(因此使用Prototype或其他使用$
作为其变量的库),则使用更多。
答案 3 :(得分:1)
您的错误的原因是,当您使用数组表示法获取它时,您将获得实际的DOM元素。 DOM元素没有text()函数。要获取所有值,请使用每个值。
var values = [];
$('p').each( function(i) {
values[i] = $(this).text();
}
要获取特定元素,请使用eq();
var value = $('p').eq(3).text();