Javascript 正则表达式在IE6/IE7中的行为不同

Javascript 正则表达式在IE6/IE7中的行为不同,javascript,jquery,html,regex,internet-explorer,Javascript,Jquery,Html,Regex,Internet Explorer,我的HTML是这样的: <select> <option>ABC (123)</option> <option>XYZ (789)</option> </select> ABC(123) XYZ(789) 我试图做的是:使用JQuery和正则表达式,我用(以下是我的JQuery行: $(this).html($(this).html().replace(/\(/g,"<span>("));

我的HTML是这样的:

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

ABC(123)
XYZ(789)
我试图做的是:使用JQuery和正则表达式,我用
以下是我的JQuery行:

$(this).html($(this).html().replace(/\(/g,"<span>("));
$(this.html($(this.html()).replace(/\(/g,“(”));
它在Firefox、chrome和safari中正常工作,但(像往常一样)在IE6/IE7(在“(“刚刚被删除”)之后的文本)上不能正常工作

有什么想法吗


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

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

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

可能发生的情况是,IE6/7不知道如何在选项中呈现范围,只是无法显示任何内容。

我认为这不是正则表达式的问题。以下内容在IE7中可以正常工作:

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

可能发生的情况是,IE6/7不知道如何在选项中呈现范围,只是无法显示任何内容。

我没有IE7,但在IE6中

javascript:"<select><option>ABC (123)</option><option>XYZ (789)</option></select>".replace(/\(/g,"<strong>(")
javascript:“ABC(123)XYZ(789)”。替换(/\(/g,()
屈服

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

并正确显示(除了
没有效果之外)。使用
而不是
时也可以正常工作。我没有IE7,但在IE6中有以下内容

javascript:"<select><option>ABC (123)</option><option>XYZ (789)</option></select>".replace(/\(/g,"<strong>(")
javascript:“ABC(123)XYZ(789)”。替换(/\(/g,()
屈服

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

并正确显示(除了
无效之外)。当使用
而不是
时,也可以正常工作。您是说
选项中的
span
无效,但这正是您试图添加的内容。如果您知道以后会弄乱它,则无效代码不会因为在加载时恰好有效而变得更漂亮。所以,如果不是,那么真的吗这是您唯一关心的问题,一定要在HTML中声明性地添加这个跨度,而不是稍后注入它

但是如果你想解决这个问题,我认为重写正则表达式以覆盖整个标记可能会有所帮助。在很多情况下,IE不允许你仅仅将HTML更改为任何内容,而是根据自己的首选项使用自己的内部表示来修复代码。例如,当你编写
时,IE将始终是内部的即使代码中没有任何体,也可以推断出一个
。同样,如果您注入
而没有
,IE可能会自行插入一个体。要避免这种情况,请确保一次性注入完整的代码:

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

您是说
选项中的
span
无效,但这正是您试图添加的内容。无效代码并不因为在加载时它恰好有效而更漂亮,如果您知道以后会弄乱它。所以,如果这是您唯一关心的问题,请确实在HTML中声明性地添加此span,ra而不是以后注射

但是如果你想解决这个问题,我认为重写正则表达式以覆盖整个标记可能会有所帮助。在很多情况下,IE不允许你仅仅将HTML更改为任何内容,而是根据自己的首选项使用自己的内部表示来修复代码。例如,当你编写
时,IE将始终是内部的即使代码中没有任何体,也可以推断出一个
。同样,如果您注入
而没有
,IE可能会自行插入一个体。要避免这种情况,请确保一次性注入完整的代码:

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

如果选项中的span无效,这是否意味着IE实际上支持该标准?如果选项中的span无效,这是否意味着IE实际上支持该标准?Chris很可能是正确的,因为我相信,即使是选项元素中的内联元素也无效。Chris很可能是正确的,我相信,甚至选项元素中的内联元素无效。谢谢,这解决了问题,IE insert本身就是正确的。如果它总是一个数字,只需将正则表达式稍微细化为$(this).html($(this).html().replace(/(\d+))/g,“($1)”;。如果可能没有数字,那么$(this).html($(this).html().replace(/((\d*))/g,“($1)”);谢谢,这解决了问题,IE insert本身的事实你是对的。如果它总是一个数字,只需将正则表达式稍微细化到$(this.html($(this.html()).replace(/(\d+)/g,($1)”;。如果没有数字可以这样做,那么$(this.html($(this.html().replace($(this.html*))/g,($1)”;