我希望将>
作为前缀的文本行包含在<span class="quoted"></span>
中。
这是我的代码:
$(document).ready(function(){
x = $('DIV#test').html();
x = x.replace(/(^|\n)>([^\n]+)(\n|$)/g, "$1<span class=\"quoted\">$2</span>$3");
$('DIV#test').html(x);
});
我找不到原因,但这只会在Chrome和IE中引用奇数行,这会使所有文字变为灰色。任何想法这个代码有什么问题?
在jsFiddle演示:http://jsfiddle.net/jBJ6V/1/
答案 0 :(得分:3)
在正则表达式上使用m
(“multiline”)标志,而不是在开始时使用交替(并对结果捕获组进行必要的调整):
$(document).ready(function(){
x = $('DIV#test').html();
x = x.replace(/^>([^\n]+)$/gm, "<span class=\"quoted\">$1</span>");
// Changes: ^----here----^ ^--here ^^--here-^
$('DIV#test').html(x);
});
m
标志告诉正则表达式将^
和$
视为相对于各行,而不是相对于整个字符串。详情部分15.10.2.6和15.10.2.7以及on MDC。
答案 1 :(得分:1)
它在IE中不起作用的原因是较旧的IE处理innerHTML的方式不同,这反映在jQuery中有不同的.html()结果。
试试这个jsfiddle:
我通过7,8和9兼容模式运行它,似乎正在运行。