2012-10-15 50 views
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上的HTA應用程序中運行。用戶基礎/配置受到高度控制。

+0

我使用innerHTML https://developer.mozilla.org/en-US/docs/DOM/element.innerHTML –

+0

所以,我怎麼會從剝離的

所有出現,

 

我串。我試過string.replace沒有運氣,普遍的共識似乎是不應該使用正則表達式。 – Reahreic

回答

2

如果你確定你的對象是一個段落,你應該使用innerHTML代替:

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

(注意MDN proposes a replacement for IE8 which lacks trim)。

你也可以使用textContent但缺點是你必須對IE做不同的測試。

+0

謝謝。因爲'{空}}不匹配製表符和換行符。'replace(/ \ s/g,'')',因爲我不能使用4 – Reahreic

1

由於trim()並不被所有的瀏覽器都支持,我建議用正則表達式刪除所有空格:

var isEmpty = 
    (pageChildren[i].innerHTML.replace(/\s/g, '').length == 0) ? true : false; 
+1

。 – Blender

+0

@Blender,點好了。 –

+0

這是否也將刪除空的

標籤?它只是刪除空格字符。 – Reahreic

0

看來,IE < 9預先設置成回車,換行到outerHTML結果,因此,例如對於空的p元素,pageChildren[i].outerHTML.toUpperCase() === '\r\n<P></P>'返回true。