2017-04-18 40 views
0

在Javascript對象中,我有一個HTML字符串(node.innerHTML),我需要從字符串中刪除空的段落,然後返回字符串。空段落包括<p></p>,<p> </p><p>&nbsp;</p>。理想情況下,我認爲該字符串應該被解析爲HTML代碼進行處理,而不是使用正則表達式。我嘗試了各種方法,似乎無法使其正常工作。Javascript - 從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; 
} 
+0

才能看到你的代碼 – 2017-04-18 20:40:48

+8

*「我嘗試了各種方法」* - 考慮包括它們。本網站不是要求某人編寫代碼的地方,而是幫助您修復自己的代碼。沒有*給予*任何東西,你不會*得到*任何東西。請修改您的問題以顯示足夠的嘗試。 – Santi

+0

循環遍歷兒童,如果type = P,那麼只能使用innerHTML作爲父代 – Bug

回答

1

如果你有機會到node,它要好得多,通過它爲HTML而不是讓innerHTML和解析這種方式運行。

const parent = document.querySelector('div'); 
 

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

這種方法將遠比試圖解析它,彷彿它是文本更可靠和更快。

如果從某處加載文本,請先將其轉換爲HTML節點,如果格式足夠好。

如果它的格式不正確的HTML,那麼生活會變得更加困難,你必須做一些棘手的錯誤傾向的字符串解析。

+0

'textContent'而不是'innerText'也會讓這個更快。 'innerText'會導致佈局。 – skyline3000

+0

選擇時需要注意一些差異。特別是,使用'textContent'會顯示隱藏的元素,根據預期的用例可能會或可能不需要。一個好消息,如果你沒有顯示隱藏的元素(或沒有),那麼'textContent'可能是一種可行的方式。 – samanime

0

你可以通過jQuery來做到這一點。您可以檢查段落的.text()innerHTML()。下面是對的jsfiddle一個例子:https://jsfiddle.net/akvap5mg/

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

如果你想刪除空段落,需要力行謹慎,如果這是你打算從字面上做的,因爲每一個元素被刪除時它改變了整個球賽什麼。這是最終爲我工作:

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

如果不調整變量max和我,然後檢測DOM元素被揭去和一個空的段落可能不會被刪除。

或者,下面的代碼比喻刪除空段落,並沒有需要調整的變量max和I:

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


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

live code

順便說一下,這裏有一個更生動的例子here