2014-11-21 95 views
7

我在AngularJS中有一些绑定,我想限制显示的字符长度。当你只有简单的文本内容时,这是一个非常简单的问题。AngularJS limitTo使用HTML标签

不过,我有一个包含HTML标签的文本:

$scope.text = "<span><h1>Example</h1><p>Special Text</p></span>" 

$scope.maxNumberOfChar = 10; 

当我使用下面的行它计算考虑到HTML标记字符数。

这可能是最好的解决方案来解决这个问题,只计算字符数,丢弃HTML标签?

在此先感谢

回答

15

我已经创建了一个解决方案,使用一个简单的过滤器和正则表达式的操作。

var appFilters = angular.module('myApp.filters', []) 
.filter('limitHtml', function() { 
    return function(text, limit) { 

     var changedString = String(text).replace(/<[^>]+>/gm, ''); 
     var length = changedString.length; 

     return changedString.length > limit ? changedString.substr(0, limit - 1) : changedString; 
    } 
}) 

和记者使用,类似于limitTo过滤

<span ng-bind-html="text | limitHtml: maxNumberOfChar"></span> 

需要注意的是,在这种情况下,我也使用HTML结合,具体的我的解决办法的。

+0

虽然限制HTML过滤器的主要想法为我工作,但我必须进一步$ sce.trustAsHtml(val)使其工作。谢谢 – 2016-06-05 01:14:57

+0

谢谢你,谢谢。 – maverickosama92 2016-06-06 10:16:13

0

为什么不根据过滤器长度显示它?

只需添加一个limitTo过滤

{{ text| limitTo:maxNumberOfChar }} 
+0

正如我在问题中所说的,当您的文本中没有HTML标签时,您的解决方案就可以正常工作 – Sericaia 2014-11-21 15:14:04

+0

啊,对不起,我误解了。您希望首先删除标签之间的文本。 http://stackoverflow.com/questions/20955770/javascript-regex-remove-text-between-html-tags – 2014-11-21 15:19:20

1

我创建了一个过滤器,逻辑是不那么好,但它的工作原理

<span ng-bind-html="text | limitHtml:maxNumberOfChar"></span> 

jsfiddle.net/4x6z283a/1/

+0

邑,我会改变它有点mas我会用过滤器。谢谢! – Sericaia 2014-11-24 10:32:27

+0

你会在这里分享最后的实现吗?谢谢 – Alberto 2014-11-24 16:43:45

+0

查看接受的答案 – Sericaia 2014-11-26 10:32:17