jQuery获得最深层次的文本节点兄弟

我有div可能包含这样的文本:

 

My text
Some more text

或者像这样

 

Here's a chunk of text

或者任何其他组合,但最终级别将包含可能会或可能不会被
分隔的文本。 (是一个包含单个节点的span ?还是同一级别的两个兄弟?)

在第一种情况下,我想要的最深的孩子的文字是:

 My text Some more text 

在第二:

 Here's a chunk of text 

我的观点是 – 无论最深层次是什么,我都希望所有兄弟姐妹都达到这个水平。 有帮助吗?

编辑

我不能简单地使用$('p').text()因为这将只返回文本,我需要编辑然后返回相同的兄弟 ,同时保留它们的样式。 所以,例如,如果我有

 

Here's some
text

我做$('p').text()然后我会得到“这里有一些文字”。 现在当我在一个变量中操作这个文本时,比如说changedText (其中保留了
),我怎么能把它放回原来的位置呢? 我不能简单地做

$('p').text(changedText); 我也不能做$('p').html(changedText');

因为格式将丢失。 这就是为什么我只想通过选择div最深层次的文本节点来访问所有文本,让我们说在$textNodes 。 这样我就可以简单地做$textNodes.text(changedText); 同时保留文本节点父节点的结构和风格。

那可能吗?

您可以使用.children()直到到达最深的节点。 我将它包装在jQuery函数中,如下所示。

 $.fn.deepest = function(){ var $level = this.first(); while (!!$level.children(":not(br)").length) { $level = $level.children(); } return $level; }; 

 console.log($("div").deepest()); //[ ​My text 
​ Some more text
​ ]

您可以使用.contents()来获取文本节点并对其进行操作或.text()

做这样的事情: http : //jsfiddle.net/hWkkJ/2/

jQuery的:

 $(function(){ $('.append').append($('p').html()); }); 

HTML:

 

My text
Some more text

您可以将BR为选择器并替换它

 $('p br').replaceWith('\n'); 

演示: http : //jsfiddle.net/fhnHR/1/

如果DIV其他BR较高的潜在问题使用.last()来隔离最后一个BR ,或者使用filter()来检查最后一个BR是否处于最深层。

提供一些更真实的html示例,展示潜在的深度和可能的树结构将有所帮助。 您可以将它们放在小提琴演示中并更新它