如何在jQuery中保存数组样式选择的元素的值?

时间:2010-03-23 01:07:55

标签: jquery

假设我们有以下内容:

<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();

如果我想循环并获取值,我该怎么办?

4 个答案:

答案 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();