【问题标题】:jQuery addClass from regex match来自正则表达式匹配的 jQuery addClass
【发布时间】:2013-02-13 10:32:46
【问题描述】:

我想改变一个输出块:

<div>Lorem ipsum dolor sit amet (consectetuer adipiscing elit sed diam nonummy nibh euismod tincidunt)</div>

到这里:

<div>Lorem ipsum dolor sit amet <span class="italics">(consectetuer adipiscing elit sed diam nonummy nibh euismod tincidunt)</span></div>

JavaScript:

var div = $('div');
var matches = div.match(/\((.*?)\)/);

if (matches) {
  matches.css('color', 'red');
}

基本上,使用正则表达式通过 addClass 将所有内容包装在(此处)中。有什么想法吗?

我觉得这很接近:http://jsfiddle.net/saltcod/DjHUt/

【问题讨论】:

标签: jquery regex


【解决方案1】:

这应该可以完成工作:http://jsfiddle.net/cqTq7/2/

这是我的代码:

var div = $('div'),
    divHTML = div.html();
var match = divHTML.match(/\((.*?)\)/);

divHTML = divHTML.replace(match[0], '<span class="italics">$&</span>');

div.html(divHTML);

请注意,match 函数是 JavaScript 中的函数,而不是 jQuery。这里我也使用了 JavaScript replace 函数。

【讨论】:

    【解决方案2】:

    你可以使用html方法:

    $('div').html(function(i, h){
       return h.replace(/\((.*?)\)/, '<span class="italics">$&</span>');
    })
    

    http://jsfiddle.net/WmCLz/

    【讨论】:

    • 或者只是使用$&amp;并删除捕获组...您还需要g标志以防万一
    • @nhahtdh 是的,如果它应该是全局的,则需要 g 标志。我只是使用了 OP 的正则表达式。
    • 我不明白你为什么得到-1...我赞成你的答案,因为它是一个合理的答案。
    • 就像一个魅力,@undefined。谢谢!
    【解决方案3】:

    试试这个:

    div = $('div');
    div.html(div.text().replace(/\([^)]+\)/g, '<span class="italics">$&</span>'));
    

    现场演示:

    http://jsfiddle.net/oscarj24/weJWL/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      相关资源
      最近更新 更多