如何获取两个封闭标签之间的文本

3
我正在寻找一个jQuery解决方案。
<pre><marker id="markerStart"></marker>
aaaaa
<span style='font-family:monospace;background-color:#a0a0a0;'>bbb</span>bb
cc<marker id="markerEnd"></marker>ccc
</pre>

如何获取<marker>标签之间的文本?应该得到以下结果:aaaaabbbbbcc。
示例2(markerEnd在SPAN标签内):
<pre><marker id="markerStart"></marker>
aaaaa
<span style='font-family:monospace;background-color:#a0a0a0;'>b<marker id="markerEnd"></marker>bb</span>bb
ccccc
</pre>

预期结果:aaaaab
谢谢。

我已经有解决方案:s = s + $('pre').html(); s = s.substring(0, s.indexOf('<marker id="marker">')); s = s.replace(/&(lt|gt);/g, function (strMatch, p1){ return (p1 == "lt")? "<" : ">"; }); s = s.replace(/</?[^>]+(>|$)/g, ""); alert(s); - Balamut
2个回答

3
您可以像这样获取两个节点之间的所有元素:
$('marker:first').nextUntil('marker').text()

然而,由于需要包含文本节点,因此您需要编写:
var contents = $('pre').contents(),
    start = contents.filter('marker:first'),
    end = start.nextAll('marker:first'),
    startIndex = contents.index(start),
    endIndex = contents.index(end);

alert(contents.filter(function(i) {
    return i > startIndex && i < endIndex;
}).text());

http://jsfiddle.net/SLaks/2jEps/


1
最后一步是添加.replace(/\s+/g, '')到结果中以去除空格,这样结果就会像OP想要的那样成为"aaaaabbbbbcc" - Rudie
markerEnd 可以出现在 <pre> 标签的任何位置。因此,这个例子(markerEnd 在 <span> 中)返回空字符串:<pre><marker id="markerStart"></marker> aaaaa <span style='font-family:monospace;background-color:#a0a0a0;'>b<marker id="markerEnd"></marker>bb</span>bb ccccc </pre> - Balamut
@Balamut:那么你需要通过DOM树进行递归,直到遇到markerEnd为止,添加文本。 - SLaks

2

好的,这里是您需要的内容:

function textBetween(id1, id2) {
    var node = document.getElementById(id1).nextSibling,
        text = ''; 

    while ( node && node.id !== id2 ) {
        text += node.textContent.trim();
        node = node.nextSibling;
    }

    return text;   
}

调用此方法以获取您的文本:

textBetween('markerStart', 'markerEnd')

在线演示:http://jsfiddle.net/simevidas/yxVxy/4/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接