繁体   English   中英

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

[英]Regex behaving differently in IE6/IE7

我的HTML是这样的:

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

我想要做的是:使用JQuery和正则表达式,用<span>(替换“(”,这是我的JQuery行:

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

它可以在Firefox,chrome和safari中正常工作,但是(照常)在IE6 / IE7上无法正常运行(“(”之后的文字被删除了)

有什么想法吗 ?

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

我不认为这是正则表达式坏了。 以下在IE7中正常运行:

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

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

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

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

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

我没有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>时也可以正常工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM