1

所以说这是我整个页面的代码:

<html>
  <body>
    <textarea></textarea>
  </body>
</html>

然后我想更新那个 textarea 的内容。我无法向该文本区域添加 id,它必须保持原样。

我的问题是,通常有很多文本区域,我会这样更新它:

$('textarea').each(function () {
  $(this).text('foo');
});

但在这种情况下,只有一个文本区域,我可以这样写:

$('textarea').text('foo');

我只是.text用作一个例子。我只是想看看当只有一个特定类型的元素时,上面提到的两段代码是否具有相同的效果。

4

4 回答 4

2

无论您拥有多少文本区域,这两段代码都会产生完全相同的效果。

于 2012-09-10T08:11:48.853 回答
2

使用时text无需使用each,因为它会更改所有选定元素的文本内容。

http://jsfiddle.net/GhVGP/

于 2012-09-10T08:09:01.530 回答
1

是的,它们是等价的。

根据文档

将匹配元素集中每个元素的内容设置为指定的文本。

因此,如果您的集合包含多个元素,则该集合中每个元素的文本都将设置为指定的元素。

因此,.each()在这种情况下,使用循环遍历集合是无用的,而且速度也较慢。


一般来说,jQuery 的所有操作方法都可以对集合的所有元素进行操作。

Setter 对整个集合进行操作:

  • addClass 将指定的类添加到每个匹配的元素集中。
  • height 设置每个匹配元素的 CSS 高度。

Getter 对集合的第一个元素进行操作:

  • height 获取匹配元素集中第一个元素的当前计算高度。

text(as getter) 有点不同,因为如果它被用作集合上的 getter,它会返回集合中元素的组合文本:

获取匹配元素集中每个元素的组合文本内容,包括它们的后代。

于 2012-09-10T08:13:37.927 回答
0

您可以在引用.text多个元素时使用该方法。setter.text(string)影响 jQuery 对象中的所有元素,getter.text连接所有元素的文本。还有一个.text(function(index, text)), 调用它想要更改的每个元素的函数。 http://api.jquery.com/text/

这同样适用于大多数其他方法:setter 影响所有元素,getter 读取(通常)第一个元素。

您可以随时使用任何功能。如果 jQuery 对象只包含一个元素,那么无论用于获取对象的选择器是否可以引用多个元素,都可以使用访问元素的方法(text、value、css),它们将访问所选的单个元素.

如果你想更加确定选择器只会选择一个元素,你可以使用 :first 伪类 ( $("textarea:first"))

顺便说一句,atextarea应该被访问.value(...)(对inputs 有效),而不是.text(...)(对 s 无效)。

于 2012-09-10T08:22:22.103 回答