如何在JQuery中获取不属于任何其他容器的div的文本?

这应该很容易。 下面给出的是HTML。

#Attachment#

我想得到#Attachment#而不是其他文本。 当我尝试

 $("#attachmentContainer").text() 

它提供了所有#Attachment#,#AttachmentName#以及#AttachmentPath#。 我知道我可以把#Auttament#放到另一个范围内并直接访问它但我只是对如何做到这一点很感兴趣。 任何帮助深表感谢。

由于您的文本恰好是

的第一个子节点:

 var firstChild = $("#attachmentContainer")[0].firstChild; var textValue = firstChild.nodeType == 3 ? $.trim(firstChild.nodeValue) : ""; 

nodeType检查是一种安全措施 – 它确保你实际上正在处理一个文本节点 – firstChild可能是不同的东西。 相应的反应,这只是一个例子。

要检索所有文本子项(或特定子项)的值,只需遍历元素的childNodes集合,将找到的所有位连接成一个字符串:

 // the optional "at" parameter lets you define which text node you want // if not given, this returns all text nodes concatenated $.fn.ownText = function(at) { var result = [], node = this[0]; if (!(node && node.childNodes)) return; for (var i=0; i 

这将为您提供项目文本

 var $item = $("#attachmentContainer").clone(); $item.children().remove(); alert($item.text()); 

克隆对象,这样您就不必删除实际的子项。 然后你可以删除子元素,这将留下你想要的项目的innerText。

这是一个方便的小方法,很容易做到这一点

 jQuery.fn.trueText = function(obj){ var $item = $(obj).clone(); $item.children().remove(); return $item.text(); }; 

现在你可以调用$("#attachmentContainer").trueText()

$(’#attachmentContainer’)。contents()。filter(function(){return this.nodeType == 3;})。text()

在类似的post上复制我自己的答案

此示例使用.contents()获取所有子节点(包括文本节点),然后使用.map()将每个子节点转换为基于nodeType的字符串。 如果节点是文本节点(即文本不在跨度内),则返回其nodeValue

这将返回一个包含字符串的jQuery集,因此我们调用.get()来获取一个我们可以调用.join()的’标准’数组对象。

 // our 'div' that contains your code: var $html = $("
\n #Attachment#\n \n \n
"); // Map the contents() into strings $html.contents().map(function() { // if the node is a textNode, use its nodeValue, otherwise empty string return this.nodeType == 3 ? this.nodeValue : ''; // get the array, and join it together: }).get().join(''); // " // #Attachment# // // // "

如果你想修剪额外的空格,你可以使用$.trim(this.nodeValue)

如果你需要做很多事情,你甚至可以制作一个插件(现在有一些选项):

 $.fn.directText = function(settings) { settings = $.extend({},$.fn.directText.defaults, settings); return this.contents().map(function() { if (this.nodeType != 3) return undefined; // remove non-text nodes var value = this.nodeValue; if (settings.trim) value = $.trim(value); if (!value.length) return undefined; // remove zero-length text nodes return value; }).get().join(settings.joinText); }; $.fn.directText.defaults = { trim: true, joinText: '' }; 

我认为文本实际上是一个文本元素 – 父div的子元素。 所以你只需要查询第一个孩子。 不过不确定。 心连心

我认为正确的良好角度是将第一部分置于

(如果跨度不合适)。

我以为我可以得到一个.filter来处理它,但是不能完全得到它…