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 应用程序中运行。用户群/配置受到高度控制。

4

3 回答 3

4

如果你确定你的对象是一个段落,你应该使用innerHTML代替:

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

(请注意,MDN建议替换缺少 trim 的 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 在外部 HTML 结果之前添加了回车、换行符,因此例如pageChildren[i].outerHTML.toUpperCase() === '\r\n<P></P>'对于空p元素返回 true。

于 2012-10-15T21:11:31.990 回答