Javascript替换仅在IE中不起作用

时间:2012-01-24 07:51:01

标签: javascript replace

此代码在任何浏览器(包括IE)

中都有效
document.getElementById('solicit').innerHTML += document.getElementById('prod1').innerHTML+"< br >";

但是当我尝试使用IE删除这个相同的子串时,它不起作用!在Firefox或Chorme中工作正常。

 var text=document.getElementById('solicit').innerHTML;
document.getElementById('solicit').innerHTML =  text.replace(document.getElementById('prod1').innerHTML+"< br >","");

IE无法使用&lt;识别子字符串br&gt; ? 我试过没有&lt; br&gt;标记和IE工作正常,但我需要能够在我的HTML元素中添加和删除空格。 使用Firefox或Chorme它没有问题。

如何解决这个问题?

非常感谢!

3 个答案:

答案 0 :(得分:2)

innerHTML属性不必返回分配给它的确切字符串。有些浏览器会这样做,但IE却没有。

在IE中读取属性时,HTML代码是从DOM中的元素构造的,而不是从用于创建元素的HTML代码构造的。在IE中,即使您在HTML代码中使用<BR>来创建元素,也会返回<br>。这可以通过case insensetive replace来解决,但同样适用于prod1中的元素,根据代码的样子,这些元素可能不那么简单。

您应该在DOM中添加/删除元素,而不是操纵HTML。在+=属性上使用replaceinnerHTML时,您将把元素转换为HTML,然后再次创建新元素,包括solicit元素中的所有元素你不改变。您可以考虑使用类似jQuery的库,这使得操作元素变得更加容易。

答案 1 :(得分:0)

查看源代码,您可能会看到 <BR>

所以在替换中添加一个“i”来忽略大小写 - 可能还有一个正则表达式来处理结果标记中缺少的空格

答案 2 :(得分:0)

感谢您的帮助! 通过说IE解释&lt;来了解你传递给我的信息。 br&gt; as&lt; BR&gt;我只能开发这个解决方案:

 var text=document.getElementById('solicit').innerHTML;
 if (navigator.appName=='Microsoft Internet Explorer')     
 document.getElementById('solicit').innerHTML = text.replace(document.getElementById('prod1').innerHTML+"<BR>","");
 else
 document.getElementById('solicit').innerHTML = text.replace(document.getElementById('prod1').innerHTML+"<br>","");

通过此浏览验证,我的代码可以正常运行。但我确信我的解决方案不是最“优雅”的。 有没有其他选择只使用javascript?

再次感谢