自动换行以某个单词开头的所有文本

时间:2018-10-08 21:55:23

标签: jquery

我正在编程一个社交媒体引擎,我想使用jQuery自动将所有http和https链接包装到<a>元素中。

这是经过大量Google搜索之后我得到的:

$('*').each(function test() {
    var str = $(this);
    if(str.match("^http")) {
        str.wrap("<a></a>");
    }
});

但是当我运行代码时,在日志中出现以下错误。

TypeError: str.match is not a function [Learn More]

执行此操作的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

正如其他人提到的那样,JavaScript的match()对字符串进行操作,而$(this)是jQuery对象,而不是字符串。参见What's the difference between '$(this)' and 'this'?

我建议针对元素的text()内容测试match()
如果以“ http”开头,请用<a>包裹元素,并将其href设置为文本内容。

$('span,p').each(function() {
  var $str = $(this);
  var text = $str.text();
  if (text.match("^http")) {
    var $link = $("<a>", {
      'href': text
    });
    $str.wrap($link);
  }
});
span,
p {
  display: block;
  margin: 0 0 .5em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<span>http://google.com</span>
<span>file://host/path</span>
<p>https://stackoverflow.com</p>
<p>Something Else</p>

答案 1 :(得分:0)

诚然,我不是第一次针对我的问题,但是无论如何,我都设法得到了答案。

$('.content').html($('.content').html().replace(/@([^\s]+)/g,'<a href="$1">@$1</a>'));

这会将所有以“ @”开头的代码包装在一个元素中。