jQuery在段落中br前后的范围内换行文本

jQuery在段落中br前后的范围内换行文本,jquery,Jquery,正如标题所示,我想知道如何在一个段落中,在br之前和之后将文本包装成一个跨度 我的HTML也是如此 <div class="blog-container"> <div class="each-article"> <p>Text text text <br/> text text text</p> </div> <div class="each-article"> <p>Te

正如标题所示,我想知道如何在一个段落中,在br之前和之后将文本包装成一个跨度

我的HTML也是如此

<div class="blog-container">
  <div class="each-article">
    <p>Text text text <br/> text text text</p>
  </div>
  <div class="each-article">
    <p>Text text text <br/> text text text</p>
  </div>
</div>

文本
文本

文本
文本

而我的jQuery,我认为会起作用,是

$('.blog-container .each-article p br').before().wrap('<span></span>');
$('.blog container.each article p br')。before().wrap('');
这给我的是:

<div class="blog-container">
  <div class="each-article">
    <p>Text text text <br><span></span></br> text text text</p>
  </div>
  <div class="each-article">
    <p>Text text text <br><span></span></br> text text text</p>
  </div>
</div>

文本

文本

文本

文本

试试这个:

$('.each-article p')。each(function(){
$(this.contents().filter(function()){
返回this.nodeType==3;
}).wrap(“”);
});
参考资料:

  • ,它选择所有子节点,包括文本节点
  • (文本节点为
    3

编辑-此处不需要修剪。但是,在某些情况下(例如,如果非文本节点是第一个子节点),可以将空白视为文本节点。看到这把小提琴:

出于好奇,这行是什么,
和&$.trim(this.textContent).length>0做什么?实际上最终使用了这个.nodeType!==1.选择未包装在其他元素(如锚定标记和/或其他内部元素)中的任何文本。但是非常感谢你,杰森,你刚才提到这件事救了我一命。
$('.each-article p').each(function() {
    $(this).contents().filter(function() {
        return this.nodeType == 3;  
    }).wrap('<span>');
});