【问题标题】:why if (element.innerHTML == "") is not working in firefox为什么 if (element.innerHTML == "") 在 Firefox 中不起作用
【发布时间】:2011-04-10 06:25:36
【问题描述】:

为什么if (element.innerHTML == "") 在 Firefox 中不起作用

但在 IE 中运行良好,请问有什么想法吗?

【问题讨论】:

  • 为什么不在 Firefox 中做一个测试输出,看看它包含什么?
  • @Pekka 输出已经包含空字符串!!
  • 请提供 HTML(您正在检查的 element)。在这种情况下,很多事情都可能出错 - 即您的 element 可能为空。

标签: javascript html internet-explorer firefox innerhtml


【解决方案1】:

没有看到你的 HTML 很难说,但我想说可能是因为元素中有一些空白区域,IE 不会将其视为文本节点,而 FF 会。

我认为将标签之间的任何空白区域视为文本节点实际上是一种更严格的标准合规性,但 IE 不遵守。

你可以这样做:

var htmlstring = element.innerHTML;

  // use the native .trim() if it exists
  //   otherwise use a regular expression  
htmlstring = (htmlstring.trim) ? htmlstring.trim() : htmlstring.replace(/^\s+/,'');

if(htmlstring == '') {...

或者只是手动删除 HTML 标记中的空格。

【讨论】:

  • @Patrick dw:谢谢你的回复和有用的信息。 ,你知道如何让这个条件在 FireFox 中起作用吗??
  • @mahmoud - 对于支持.trim() 的浏览器,您可以在测试之前修剪空白。不过,并非所有浏览器都支持.trim()。我会在一分钟内更新。
  • var str=element.innerHTML(); str = str.replace(/^\s*|\s*$/g,""); if (str == "") { alert('我太棒了'); }
  • @Tomás - 您实际上可以摆脱正则表达式的后半部分。如果innerHTML只有空格,那么测试字符串的开头结尾是多余的。
  • @all : 感谢您的大力支持 :)
【解决方案2】:

检查空字符串的另一种方法是检查长度:

element.innerHTML.length == 0

但是,如果您有想要匹配的空白字符串,您仍然需要 trim()

【讨论】:

    【解决方案3】:

    您可以检查element.innerHTML.trim() == "" 是否获得最佳结果。但是,您必须使用trim() 方法扩展字符串原型:

    if (!String.prototype.trim) {
        String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
    }
    
    if (element.innerHTML.trim() == "") {
      //do something
    }
    

    【讨论】:

    • 这将覆盖支持.trim()的浏览器中的任何本机实现。你真的应该先测试一下。
    • 是的,我认为这将涵盖它。 :o)
    【解决方案4】:

    对我来说,设置我的innerHTML 似乎在FirefoxChrome 中都不起作用,但由于我的错误,它在IE 中确实起作用。事实证明,我一开始就没有使用getElementById 获取元素。 IE 似乎可以很好地处理用 name=getElementById 定义的元素,但 FirefoxChrome 更严格并且只接受 id= 元素。 (在我看来更正确) 我希望这可以节省一些人的挫败感。
    为什么IE会做这些事情,迷惑人……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多