我只是尝试使用
从DOM节点中提取没有任何元素的文本var textIWant = $('.classname').contents().filter(function(){
return this.nodeType === 3;
})[1];
这让我回想起看起来就像控制台中的一个字符串一样,没有修剪过像..
" text I want "
所以当我用
之类的东西修剪文本时$.trim(textIWant)
我得到了
“[object Text]”
也如你所料,
typeof textIWant
返回“对象”
为什么这个字符串看起来对象不是字符串,我怎样才能得到我需要的字符串?我不能使用诸如String()或toString()之类的方法,它只会将它转换为我上面提到的相同“[object Text]”。
**编辑 我还想补充一点,我正在使用代理服务器,所以我没有直接访问原始HTML编写,否则,常识解决方案是将文本包装在HTML标记中并使用jQuery查询它。文本()。我的问题来自边缘案例场景,而不是不熟悉jQuery:)。
**回答
这样的事情似乎可以解决问题
$.trim($($('.classname').contents().filter(function(){
return this.nodeType === 3;
})[1]).text())
谢谢。
答案 0 :(得分:3)
你有一个TextNode
对象,所以需要这样阅读:
var text = $(textIWant).text();
或原生
var text = textIWant.nodeValue;
答案 1 :(得分:2)
我认为你的问题没有理由说明为什么你需要直接处理文本节点。 jQuery将为您提取文本。
如果您只有一个匹配.classname
的对象,那么从该元素获取文本的更简单方法是:
var textIWant = $.trim($(".classname").text());
这将收集.classname
元素内所有文本节点的文本。您无需亲自过滤它们。
如果您有多个与.classname
匹配的元素而您只想要第一个元素,那么您可以使用:
var textIWant = $.trim($(".classname").eq(0).text());
将来,如果你有一个textNode DOM元素并希望从中检索文本,你可以使用node.nodeValue
从textNode获取文本。
关于你的其他问题:
为什么这个字符串看起来不是一个字符串,我怎么能得到它 我需要的字符串?
您正在检索文本节点DOM对象,而不是节点中的文本。您可以使用node.nodeValue
从文本节点获取实际文本,然后您将拥有一个可以作为字符串操作的字符串。
我不能使用String()或toString()之类的方法 将其转换为相同的" [对象文本]"我把它放在上面。
这是因为你有一个文本节点,而不是一个字符串。您只需要从节点中获取文本,然后就可以将其用作字符串。
答案 2 :(得分:0)
在将代码分配给" textIWant"之前,请在代码中使用.toString()。变量或您可以通过此函数将其转换为字符串: http://www.w3schools.com/jsref/jsref_string.asp
注意:如果您的对象是DOM元素,您可以使用" text"来自jquery的函数: http://api.jquery.com/text/
答案 3 :(得分:0)
textIWant
是一个Text节点。因此,当您将其抛入$.trim
时,它将尝试在对象上运行它。
您可能想要询问TextNode的textContent
$.trim(textIWant.textContent); //Does not work in IE8 or below
或者像Alex K.建议使用jQuery使用.text()
$.trim($(textIWant).text);