如何迭代元素中的每个单词然后有条件地包装匹配?

时间:2015-05-17 18:17:22

标签: jquery html replace each contains

我在自己的博客中使用ASP.NET写作,并且我使用Gist embed作为代码块。我想为代码着色以匹配特定语言在其IDE中的显示方式。特别是Xcode中的Swift。

我从一个jsFiddle开始,已经到了选择" var"并将其变为红色,但我发现迭代单词并包装它们的示例使用 return 值来打破循环。

更新:我在这里找到的return语句会导致语法错误。我改编了this post的代码,很乐意探索替代方案。

如何迭代屏幕上的每个单词并有条件地包装它们?

我能够匹配一个单词,但我无法找到继续操作的方法。为简单起见,我们只能找两个单词, var & 替换即可。

我的代码:

var line = $('.line');

$.each(line, function(i, val){
   var value = $('.line').text();

    $("*:contains('var')").html(function(_, html) {

        return html.replace(/(var)/g, '<span style="color:red;">$1</span>');
    });

    $("*:contains('override')").html(function(_, html) {

        return html.replace(/(override)/g, '<span style="color:blue;">$1</span>');
    });
});

我的jsFiddle

1 个答案:

答案 0 :(得分:1)

你有一个迭代遍历每一行的循环,并且在该循环内你获取每次迭代中包含一个单词的所有元素,使替换运行很多次

迭代执行一次,可以通过回调html()来完成迭代,并在同一循环中执行替换

$('.line').html(function(_, html) {
    html = html.replace(/(var)/g, '<span style="color:red;">$1</span>');
    html = html.replace(/(override)/g, '<span style="color:blue;">$1</span>');

    return html;
});

FIDDLE