如何缩短url以仅使用angular.js过滤器显示域

时间:2013-01-30 00:56:20

标签: javascript angularjs

我的Json中有一些长网址,我试图找出使用angular的过滤器显示域名的最佳方式,或者只是一些javascript?

http://www.example.com/page-with-a-long-long-long-OMG-so-long-name.html

www.example.com

谢谢你!

4 个答案:

答案 0 :(得分:13)

在AngularJS中创建自己的过滤器非常容易:

app.filter( 'domain', function () {
  return function ( input ) {
    var matches,
        output = "",
        urls = /\w+:\/\/([\w|\.]+)/;

    matches = urls.exec( input );

    if ( matches !== null ) output = matches[1];

    return output;
  };
});

您可以在视图中轻松调用:

<span>{{ myUrl | domain }}</span>

这是一个Plunker:http://plnkr.co/edit/bVSv7n?builder&p=preview

这是一个超级简单的正则表达式,你可能想要扩展它,但它可以工作!

答案 1 :(得分:7)

这个角度过滤器也可以使用!

它非常酷且简单,因为它使用了内置URI解析功能的浏览器,而不是依赖于正则表达式。

angular.module('myCoolApp')
  .filter('urlFilter', function ($document) {
    return function (input) {
      var parser = document.createElement('a');
      parser.href = input;
      return parser.hostname;
  };
});

您可以在视图中实现它。

{{ myLongURL | urlFilter }}

如果myLongURLhttp://www.example.com/page-with-a-long-long-long-OMG-so-long-name.html,则在通过过滤器后,它会显示为example.com。如果你想在开头www.,你可以这样做!

www.{{myLongURL | urlFilter}}

答案 2 :(得分:0)

使用location.hostname获取没有累积的域名。

http://fiddle.jshell.net/TUeJ7/

答案 3 :(得分:0)

我创建了这个过滤器

angular.module('App').filter( 'domainOfUrl',['$filter',function ($filter) {
  return function ( input ) {
     var urlParts = input.split('/');      
    return urlParts[2];
  };
}]);

以上过滤器的工作原理如下:

输入:https://www.amazon.in/b/ref=s9_acss_bw_***_x

输出:www.amazon.in

如果需要,请使用$filter