为什么if (element.innerHTML == "")
无法在firefox中运行
但在IE中工作得很好,有什么想法吗?
答案 0 :(得分:17)
很难说没有看到你的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标记中的空白。
答案 1 :(得分:5)
您可以检查element.innerHTML.trim() == ""
是否获得最佳效果。但是,您必须使用trim()
方法扩展字符串原型:
if (!String.prototype.trim) {
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
}
if (element.innerHTML.trim() == "") {
//do something
}
答案 2 :(得分:3)
检查空字符串的另一种方法是检查长度:
element.innerHTML.length == 0
但是,如果你有一个想要匹配的空白字符串,你仍然需要trim()
。
答案 3 :(得分:1)
对我而言,设置我的innerHTML
似乎无法在Firefox
或Chrome
中工作,但由于我的错误,它在IE
中有效。事实证明,我从来没有使用getElementById
来获取元素。 IE
似乎与使用name=
但getElementById
定义的元素完全一致,但Firefox
和Chrome
更严格且仅接受id=
元素。 (在我看来更正确)
我希望这能让人感到沮丧。
为什么IE会做这些事情并让人迷惑......