首页 > 解决方案 > 从 HTML 文本的开头剥离所有 br 标记,直到下一个元素是文本节点 Javascript 或 jQuery

问题描述

可以说我有这个代码:

<div class ="element">
  <br>
  <span>
    <br>
      <span>
       <br>
        text node
        <br>
      </span>
     <br>
  </span>
</div>

<div class ="element">
  <br>
  <span>
    <br>
    <br>
        text node
  </span>
</div>

我想循环每个元素都有类“元素”并删除所有br标签,直到循环到达文本节点然后停止删除br,代码如下所示:

<div class ="element">
  <span>
      <span>
        text node
        <br>
      </span>
      <br>
  </span>
</div>

<div class ="element">
  <span>
        text node
  </span>
</div>

更新

var stop2 = false;
var walk_the_DOM2 = function walk2(node, func) {
//func(node);
node = node.firstChild;


while (node && !stop2) {      
walk2(node, func);	

if(func(node)== true){
stop2 = true;
}
	
  node = node.nextSibling;  
	
}
};




$('.element').each(function(index, elem) {
var hh  = elem;
	
stop2 = false;
walk_the_DOM2(hh, function(el) {

if(el.tagName =="BR"){
alert(el.tagName);
$(el).css('display', 'none');	
}else if(el.tagName == undefined){

if($(el).text().replace(/^\s+|\s+$/g, '').replace(/(\r\n\t|\n|\r\t)/gm,"").length > 0){
alert($(el).text());
return true;
}
}	
});	
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>
<div class ="element">
  <br>
  <span>
    <br>
      <span>
       <br>
        text node
        <br>

      </span>
     <br>
  </span>
</div>

标签: javascriptjqueryeach

解决方案


像这样写你的代码:

<div class ="element">
<br>
<span>
<br>
  <span>
   <br>
    <span class="anchor">text node</span>
    <br>
  </span>
 <br>
 </span>
 </div>
<div class ="element">
<br>
<span>
   <br>
   <br>
    <span class="anchor">text node</span>
</span>
</div>

现在使用此循环删除所有以前的br

$('.element').each(function () {
        var anchor = $(this).find('span:contains(text node)');
        anchor.prev("br").remove();
    });

您可以使用锚类而不是文本,但仅对文本使用锚跨度是必要的,这意味着如果您<br>在锚中写入<span>它不会删除。您可以在此代码中删除锚类,我不使用它。


推荐阅读