【问题标题】:Combine filter and regex结合过滤器和正则表达式
【发布时间】:2014-11-25 09:27:42
【问题描述】:

我想用 span 替换括号中标签的内容

示例文本

<a href="#">Linkname [subtitle]</a>

结果应该是

<a href="#">Linkname <span class="subtitle">subtitle</span></a>

到目前为止我所尝试的:

jQuery(document).ready(function() {
    jQuery( "a" )
        .contents()
        .filter(function(){
            return this.match(\[.*\]);
        })
    .wrap( "<span class='subtitle'></span>" );
});

但我收到错误“Uncaught SyntaxError: Unexpected token ILLEGAL”

【问题讨论】:

  • 无论如何,如果它在最后工作
  • 感谢 regex shure 工作正常,但我也需要 javascript 部分,因为这是动态生成的内容

标签: jquery regex filter


【解决方案1】:

你可以这样做

$('a').html(function(_,html){
   return html.replace(/\[(.+?)\]/g, "<span class='subtitle'>$1</span>");
});

【讨论】:

  • 注意:这个粗略的解决方案会删除 A 元素的全部内容,只有在你没有任何绑定的情况下才可以(这里可能就是这种情况)
  • 谢谢,我试过这样:jquery('a) 但我收到错误:Uncaught TypeError: undefined is not a function (running Joomla 3 Template in Jquery non-conflict mode)
  • @dystroy 全部内容你是什么意思?内容不会改变,只会被替换。
  • 我很确定你需要你的函数定义为function(i, html),因为传递给函数的第一个参数是元素的索引:.html()
  • @Owl 如果您的a 元素中只有一些文本,那么这里显示的replace 是正确的解决方案。如果您想在页面或任何大型复合元素上进行替换,请不要使用它。
【解决方案2】:
var re = /\[([^\]]*)\]/g;
var str = '<a href="#">Linkname [subtitle]</a>';
var subst = '<span class=\'$1\'>$1</span>"';

var result = str.replace(re, subst);

查看演示。

http://regex101.com/r/rA7aS3/4

【讨论】:

  • 在许多情况下这是一个不错的解决方案,但请注意,这将替换整个父元素,从而删除所有事件绑定。
  • 但我需要从 html 中动态提取的 str 链接,因此我使用的是 jquery
  • var str = ''
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
相关资源
最近更新 更多