将所有内容包裹在 hr 元素之间

wrap everything between hr elements

试图找到一种方法将代码中的所有 hr 标记换行,但目前还没有成功。对代码有什么建议吗?

这是我现在正在做的事情(也作为 fiddle):

$('hr').each(function() {
  $(this).next('hr').wrapAll('<div style="background-color:yellow"></div>');
});
Text
<hr>
Text1
Text2
<hr>
Text3
<hr>
Text4
Text5
<hr>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

jQuery 对文本节点的帮助不大(contents 除外)。这里最简单的事情可能是只使用 DOM 本身来查找以下兄弟节点(包括文本节点),然后将它们包装在 div;查看评论:

$('hr').each(function() {
  // Build an array of all nodes (including text nodes)
  // up to and not including the next HR if any
  var nodes = [];
  var n = this.nextSibling;
  while (n && n.nodeName != "HR") {
    nodes.push(n);
    n = n.nextSibling;
  }
  // Wrap them in a div
  $(nodes).wrapAll('<div style="background-color:yellow"></div>');
});
Text
<hr>
Text1
Text2
<hr>
Text3
<hr>
Text4
Text5
<hr>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>