[英]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.