2017-04-18 10 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

ことができますあなたのコードを参照してください –

+8

* "私はあらゆる種類のアプローチを試しました" * - それらを含めることを検討してください。このウェブサイトは、あなたのコードを書くように誰かに依頼する場所ではなく、自分のコードを修正するのに役立ちます。 *何も与えないと、何も得られません。十分な試行を見せるために質問を編集してください。 – Santi

+0

タイプ= Pの場合、子をループし、親にinnerHTMLのみを使用します。 – Bug

答えて

1

あなたはnodeへのアクセス権を持っている場合、代わりにinnerHTMLを取得し、そのようにパースのHTMLとしてそれを実行するためにはるかに良いと思います。

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'はレイアウトを引き起こします。 – 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

あなたは空の段落を削除したい場合は、1要素が削除されるたびに、それは全体のボールゲームが変更されるためそれはあなたが文字通りするつもり何であれば最大限の注意を払う必要があります。これは、最終的には私のために働いていたものです:

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

あなたがオフにスローされますと、空の段落が削除されないことがあります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

関連する問題