gpt4 book ai didi

javascript - 在angularjs中突出显示跨度的文本

转载 作者:行者123 更新时间:2023-11-30 21:13:08 24 4
gpt4 key购买 nike

目前我有一个代码,如果与该数组匹配,则突出显示列表中的单词。

  $scope.arrayFilter=["is","mom","beautifull",'beer'];

这段代码我不再需要了。我只需要从数组中突出显示类“.marque”的文本,而不会丢失执行“marquee”效果的库的效果。我该怎么做?

https://jsfiddle.net/mafa4hro/

<div ng-app="testApp" ng-controller="testCtrl">
<li ng-repeat="item in data ">
<span ng-bind-html="item.title | highlight:arrayFilter"></span>
</li>
<div class='marquee' >mom is beautifull</div>
</div>

var app = angular.module('testApp',[]);
app.controller('testCtrl',function($scope){
$scope.arrayFilter=["mom","is","beautifull",'beer'];
$scope.data = [{
title: "mom is beautifull"
}, {
title: "my mom is great"
}, {
title: "I hate the matematics"
}];

//marquee effect
$('.marquee').marquee({
duration: 5000
});

$('.marquee')
.bind('finished', function(){
console.log('finish')
$(this).html('If it works, i need a beer')
//Apply marquee plugin again
.marquee({
duration: 5000,
})
})

});

app.filter('highlight', function($sce) {
return function(text, arrayFilter) {
angular.forEach(arrayFilter, function(key, value) {
if (text.includes(key)) {
text = text.replace(new RegExp(key, 'gi'), '<spanclass="highlightedText">$&</span>')
}
})
return $sce.trustAsHtml(text);

}
});

最佳答案

您可以将第二个参数添加到过滤器指示像这样的选框元素:

<div class='marquee' ng-bind-html="text | highlight:arrayFilter:true"></div>

过滤器中,您可以检查此标志并应用选取框:

if (isMarquee)
$('.marquee').marquee({duration: 5000});

请参阅下面的演示和 updated jsfiddle :

var app = angular.module('testApp', []);
app.controller('testCtrl', function($scope) {
$scope.arrayFilter = ["is", "mom", "beautifull", 'beer', 'hate'];
$scope.data = [{
title: "mom is beautifull"
}, {
title: "my mom is great"
}, {
title: "I hate the matematics"
}];

$scope.text = 'If it works, i need a beer';
});

app.filter('highlight', function($sce) {
return function(text, arrayFilter, isMarquee) {
angular.forEach(arrayFilter, function(key, value) {
if (text.includes(key)) {
text = text.replace(new RegExp(key, 'gi'), '<span class="highlightedText">$&</span>')
}
})
if (isMarquee)
//marquee
$('.marquee').marquee({
duration: 5000
});
return $sce.trustAsHtml(text);

}
});
.highlightedText {
background: yellow;
}

.marquee {
width: 300px;
overflow: hidden;
border: 1px solid #ccc;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jQuery.Marquee/1.3.94/jquery.marquee.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.js"></script>



<div ng-app="testApp" ng-controller="testCtrl">
<li ng-repeat="item in data ">
<span ng-bind-html="item.title | highlight:arrayFilter"></span>
</li>

<div class='marquee' ng-bind-html="text | highlight:arrayFilter:true">mom is beautifull</div>
</div>

关于javascript - 在angularjs中突出显示跨度的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45929547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com