无法检测空段

时间:2012-10-15 19:09:27

标签: javascript html dom

我使用以下代码检查空段,但它永远不会返回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应用程序中运行。用户群/配置受到高度控制。

3 个答案:

答案 0 :(得分:2)

如果您确定自己的对象是段落,则应使用innerHTML代替:

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

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

您也可以使用textContent,但缺点是您必须对IE进行不同的测试。

答案 1 :(得分:1)

由于所有浏览器都不支持trim(),我建议使用RegEx删除所有空格:

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

答案 2 :(得分:0)

似乎IE&lt; 9前面有一个回车符,换行到outerHTML结果,所以例如pageChildren[i].outerHTML.toUpperCase() === '\r\n<P></P>'为空的p元素返回true。