2

次のコードを使用して空の段落をチェックしていますが、trueが返されることはありません。なんで?

var isEmpty = pageChildren[i].outerHTML.toUpperCase() === "<P></P>";
var isSpace = pageChildren[i].outerHTML.toUpperCase() === "<P> </P>";
var isNbsp = pageChildren[i].outerHTML.toUpperCase() === "<P>&NBSP;</P>";
if(!isEmpty && !isSpace && !isNbsp){
   //do something
}else{
   //do something else
}

これは、IE8デバッグツールがouterHTMLにあると言っていることのコピーペーストです。"<P></P>"

これはiFrameから読み取られているため、<p></p>上記の関数がフレーム本体の子要素の数をトリガーするため、タグを削除する必要があります。

さらに、これはIEのH​​TAアプリケーションでのみ実行されます。ユーザーベース/構成は高度に制御されています。

4

3 に答える 3

4

オブジェクトが段落であることが確実な場合は、代わりにinnerHTMLを使用する必要があります。

var isEmpty = pageChildren[i].innerHTML.trim().length==0;

(MDNはトリムのないIE8の代替品を提案していることに注意してください)。

textContentを使用することもできますが、欠点はIEに対して別のテストを実行する必要があることです。

于 2012-10-15T19:10:38.350 に答える
1

すべてのブラウザでサポートされているわけではないためtrim()、RegExですべてのスペースを削除することをお勧めします。

var isEmpty =
    (pageChildren[i].innerHTML.replace(/\s/g, '').length == 0) ? true : false;
于 2012-10-15T19:14:25.060 に答える
0

IE <9は、outerHTMLの結果にキャリッジリターンとラインフィードを付加するようです。たとえばpageChildren[i].outerHTML.toUpperCase() === '\r\n<P></P>'、空のp要素に対してはtrueを返します。

于 2012-10-15T21:11:31.990 に答える