Javascript - 从HTML字符串

时间:2017-04-18 20:39:53

标签: javascript html

在Javascript对象中,我有一个HTML字符串(node.innerHTML),我需要从字符串中删除空段落,然后返回字符串。空段落包括<p></p><p> </p><p>&nbsp;</p>。理想情况下,我认为字符串应该被解析为HTML代码进行处理而不是使用正则表达式。我尝试了各种方法,似乎无法使其正常工作。

这是我尝试过的代码,但它只返回一个只包含prevObject数据的对象,而且似乎没有删除空段落。

function strip_empty_p (node) {     
    var html = $(node.innerHTML);
    html = html.filter($('p'),function () {
        return this.innerHTML == "" ||
        this.innerHTML == " " ||
        this.innerHTML == "&nbsp;"
        }).remove();    
    node.innerHTML = html.innerHTML;
    return node.innerHTML;
}

3 个答案:

答案 0 :(得分:1)

如果您有权访问node,那么以HTML格式运行它,而不是获取innerHTML并以此方式解析它会好得多。

&#13;
&#13;
const parent = document.querySelector('div');

parent.childNodes.forEach(child => child.nodeType === document.ELEMENT_NODE 
  && !child.innerText.trim() 
  && parent.removeChild(child));
&#13;
<div>
 <p></p>
 <p> </p>
 <p>Not empty</p>
 <p>&nbsp;</p>
 <p>Also not empty</p>
 <p></p>
</div>
&#13;
&#13;
&#13;

这种方法比尝试解析它更加可靠和快速,就好像它是文本一样。

如果您从某个地方将其加载为文本,请先将其转换为HTML节点,如果它的格式良好。

如果HTML格式不正确,那么生活就会变得更加困难,而且你必须做一些棘手的,容易出错的字符串解析。

答案 1 :(得分:0)

你可以通过jQuery来做到这一点。您可以查看段落的.text()innerHTML()。这是关于jsfiddle的一个例子:https://jsfiddle.net/akvap5mg/

$(document).ready(function(){
  $("p").each(function(){
    var $this = $(this);
    if($this.text().trim() === '') {
            $this.remove();
    }
  });
});

答案 2 :(得分:0)

如果你想删除空段落,那么你需要谨慎行事,如果这是你打算做的事情,因为每次删除一个元素都会改变整个球赛。这最终对我有用:

ICDeviceBrowser

live code

如果你没有调整变量max和i,那么检测到DOM元素会被抛弃,并且可能无法删除空段落。

或者,以下代码比喻删除空段落,无需调整变量max和i:

    var d = document.getElementsByTagName("div")[0];


  for (i=0, max=4; i <= max; i++) {
     if ( d.children[i].textContent.trim() == ""){
                  d.removeChild(d.children[i]);
                    max--;
                    i--;
       }
  }

live code

顺便提一下,这是一个更生动的例子here