Javascript 正在尝试使用filter()仅从节点获取文本,但返回的是对象吗?

Javascript 正在尝试使用filter()仅从节点获取文本,但返回的是对象吗?,javascript,jquery,dom,text,Javascript,Jquery,Dom,Text,我只是尝试从具有 var textIWant = $('.classname').contents().filter(function(){ return this.nodeType === 3; })[1]; 这将返回到控制台中看起来像字符串的内容,一些未经修剪的内容,如 " text I want " 因此,当我去修剪文本时,使用 $.trim(textIWant) 我明白了 “[对象

我只是尝试从具有

var textIWant = $('.classname').contents().filter(function(){
                    return this.nodeType === 3;
                })[1];
这将返回到控制台中看起来像字符串的内容,一些未经修剪的内容,如

"           text I want      "
因此,当我去修剪文本时,使用

$.trim(textIWant)
我明白了

“[对象文本]”

正如你所料

typeof textIWant
返回“对象”

为什么这个看起来像字符串的对象不是字符串,我怎样才能得到我需要的字符串?我不能使用诸如String()或toString()之类的方法,它只会将其转换为我在上面放置的相同“[对象文本]”

**编辑 我还想补充一点,我使用的是代理服务器,因此我无法直接访问编写的原始HTML,否则,常识性的解决方案是将文本包装在HTML标记中,并使用jQuery的.text()进行查询。我的问题来自一个边缘案例场景(对jQuery并不陌生:)

**答复

像这样的事情似乎起了作用

$.trim($($('.classname').contents().filter(function(){
                    return this.nodeType === 3;
                })[1]).text())
谢谢。

在将其分配给“textIWant”变量之前,请在代码中使用.toString(),或者通过此函数将其转换为字符串:

注意:如果对象是DOM元素,则可以使用jquery中的“text”函数:

您有一个
TextNode
对象,因此需要读取它:

var text = $(textIWant).text();
还是天生的

var text = textIWant.nodeValue;

textIWant
是一个文本节点。因此,当您将它放入
$.trim
时,它将尝试在对象上运行它

您可能需要请求TextNode的
textContent

像这样

$.trim(textIWant.textContent)//不适用于IE8或以下版本
或者像Alex K一样。建议使用jQuery使用
.text()

$.trim($(textIWant).text);

我看不出你的问题中有任何理由说明你为什么需要自己直接处理文本节点。jQuery将为您获取文本

如果只有一个对象与
.classname
匹配,则从该元素获取文本的更简单方法是:

var textIWant = $.trim($(".classname").text());
这将从
.classname
元素中的所有TextNode收集文本。你没有必要自己过滤它们


如果您可能有多个元素与
.classname
匹配,并且您只需要第一个元素中的文本,则可以使用以下方法:

var textIWant = $.trim($(".classname").eq(0).text());

将来,如果确实有textNode DOM元素,并且希望从中检索文本,则可以使用
node.nodeValue
从textNode获取文本


关于你的其他问题:

为什么这个看起来像字符串的对象不是字符串,我如何获得 我需要绳子吗

您正在检索文本节点DOM对象,而不是节点中的文本。您可以使用
node.nodeValue
从文本节点获取实际文本,然后您将拥有一个可以作为字符串操作的字符串

我不能使用String()或toString()之类的方法,它只会 将其转换为我在上面放置的相同“[对象文本]”


这是因为您有一个文本节点,而不是字符串。您只需将文本从节点中取出,然后就可以将其用作字符串。

我认为在这个问题中根本没有必要处理文本节点。正如其他答案所示,只使用
.text()
向jQuery查询元素的文本要好得多。不过,理解会降低未来的效率confusion@JustinRusso-OP的问题涉及文本节点。这就是这里要问的问题,这应该是什么答案。这里有两件事,第一件是jqueries.text()函数将从该.classname获取所有文本,并从该节点的子节点获取文本。我只想从我选择的节点检索文本,因此需要过滤。第二件事是,我使用的是代理,因此我无法访问正在编写的即时html,否则我只需减轻压力,并将文本包装成

只需查询一下就可以了。@DirkDunn-下次显示实际的HTML并描述您试图从中获取的文本,您将得到更准确的答案。我们正在猜测您试图处理的HTML源代码,因为您没有向我们显示它。请记住(您只描述解决方案中的问题,而不是您试图解决的实际问题),这会使我们很难给出最佳和准确的答案。如果你把整个实际问题都展示出来,我会提供一个更有用的答案。