代码之家  ›  专栏  ›  技术社区  ›  Nick Vanderbilt

jquery突出显示文本的某一部分

  •  1
  • Nick Vanderbilt  · 技术社区  · 15 年前

    我的团队得出结论,为了突出某些文本,我们将使用!!!作为特殊符号。说来话长。

    I love !!!JavaScript and jQuery!!!.
    

    应该转变成

    I love <span class='hl'>JavaScript and jQuery</span>.
    

    不要担心边缘情况。我们正在为学龄儿童开发一个系统,他们没有很多刘海复杂的文本。

    附加问题:在应用span之后,我打算使用jQuery插件突出显示代码。任何这方面的建议。

    4 回复  |  直到 15 年前
        1
  •  2
  •   Majid Fouladpour    15 年前

    replace

    var mytext = "I love !!!Javascript and jQuery!!!. Ya, !!!jQuery!!! rocks!";
    
    while(true) {
        if (mytext.indexOf('!!!') == -1) break;
        mytext = mytext.replace('!!!', '<span class="hl">');
        mytext = mytext.replace('!!!', '</span>');
    }
    alert(mytext);
    

    输出:
    I love <span class="hl">Javascript and jQuery</span>. Ya, <span class="hl">jQuery</span> rocks!

        2
  •  1
  •   Ian Henry    15 年前

    你甚至不需要jQuery——你可以用javascript的内置字符串来实现 replace 功能:

    var s = 'I love !!!JavaScript and jQuery!!!. Even with multiple !!!occurrences!!!.';
    var replaced = s.replace(/!!!(.+?)!!!/g, function(match, text)
        {
            return '<span class="hl">' + text + '</span>'; 
        }
    );
    

    代替 函数接受正则表达式和用于确定替换字符串的函数。函数的参数是完全匹配的(例如'!!!Javascript和jQuery!!!'),则匹配的每个部分对应于正则表达式的每个参数化组件(在本例中只有一个)。

    ? 在正则表达式中 .+ 比赛 lazy ,这样您就可以得到:

    I love <span class="highlight">JavaScript and jQuery</span>. Even with multiple <span class="highlight">occurrences</span>.
    

    而不是这样:

    I love <span class="highlight">JavaScript and jQuery!!!. Even with multiple !!!occurrences</span>.
    
        3
  •  0
  •   JasCav    15 年前

    我想对于这个问题,你需要 contents() Only select text node without DOM .

    你要面对的困难是你需要奇数!!!'要用“和”替换替换为。幸运的是,jQuery有用于 odds evens

        4
  •  0
  •   Marcel Stör    14 年前

    对于jQuery文本突出显示插件,您可能需要考虑 http://www.frightanic.com/2011/02/27/lenient-jquery-highlight-plugin-javascript/