正则表达式在IE6 / IE7中表现不同

时间:2009-11-18 17:37:37

标签: javascript jquery html regex internet-explorer

我的HTML是这样的:

<select>
    <option>ABC (123)</option>
    <option>XYZ (789)</option>
</select>

我要做的是:使用JQuery和正则表达式,我将{(1)替换为<span>(这里是我的JQuery行:

$(this).html($(this).html().replace(/\(/g,"<span>("));

它在Firefox,Chrome和safari中按预期工作,但(像往常一样)在IE6 / IE7上没有正常运行(“(”只是删除后)的文本

有什么想法?

PS:我这样做是因为我需要“(数字”)使用不同的颜色,而<span>中的<option>无效

3 个答案:

答案 0 :(得分:2)

我认为这不是正则表达式。以下在IE7中工作正常:

alert("(test".replace(/\(/g,"<span>("));

可能发生的事情是,IE6 / 7不知道如何在一个选项中渲染一个跨度而只是无法显示任何内容。

答案 1 :(得分:1)

您说span中的option无效,但这正是您要添加的内容。无效的代码不仅仅因为它恰好在加载时才有效,如果你知道你以后会搞乱它。实际上,如果这是您唯一关注的问题,请在HTML中以声明方式添加此范围,而不是稍后注入。

但是如果你想解决这个问题,我认为如果你重写正则表达式来覆盖整个标签可能会有所帮助。在很多情况下,IE不会让你只是将HTML改为任何东西,而是会根据自己的喜好使用自己的内部表示来修复代码。例如,当您编写table时,IE将始终在内部推断tbody,即使代码中没有任何内容也是如此。以同样的方式,如果您注入<span>并且没有</span>,IE可能会自行插入一个。要解决这个问题,请确保一次完整地注入代码:

$(this).html($(this).html().replace(/\((.*?)\)/g,"<span>($1)</span>"));

答案 2 :(得分:0)

我没有IE7,但在IE6中有以下

javascript:"<select><option>ABC (123)</option><option>XYZ (789)</option></select>".replace(/\(/g,"<strong>(")

产量

<select><option>ABC <strong>(123)</option><option>XYZ <strong>(789)</option></select>

并正确显示(除了<strong>没有效果)。使用<span>代替<strong>

时也可以正常使用