我的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>
无效
答案 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>