J'ai un texte comme ça:
<span>My text</span>
Je veux afficher sans tags:
My text
Je ne veux pas non plus appliquer les balises, je veux les décaper. Quel est un moyen facile de faire cela?
Angulaire html:
<div>{{myText | htmlToPlaintext}}</div>
jQuery est environ 40 fois plus lent , veuillez ne pas utiliser jQuery pour cette tâche simple.
function htmlToPlaintext(text) {
return text ? String(text).replace(/<[^>]+>/gm, '') : '';
}
utilisation:
var plain_text = htmlToPlaintext( your_html );
angular.module('myApp.filters', []).
filter('htmlToPlaintext', function() {
return function(text) {
return text ? String(text).replace(/<[^>]+>/gm, '') : '';
};
}
);
utilisation :
<div>{{myText | htmlToPlaintext}}</div>
à partir de https://docs.angularjs.org/api/ng/function/angular.element
angular.element
encapsule un élément DOM brut ou une chaîne HTML en tant qu'élément jQuery (si jQuery n'est pas disponible, angular.element délègue au sous-ensemble intégré de jQuery d'Angular, appelé "jQuery lite" ou "jqLite.")
Pour que vous puissiez simplement faire:
angular.module('myApp.filters', []).
filter('htmlToPlaintext', function() {
return function(text) {
return angular.element(text).text();
}
}
);
Usage:
<div>{{myText | htmlToPlaintext}}</div>
var app = angular.module('myapp', []);
app.filter('htmlToPlaintext', function()
{
return function(text)
{
return text ? String(text).replace(/<[^>]+>/gm, '') : '';
};
});
<p>{{DetailblogList.description | htmlToPlaintext}}</p>
Vous souhaitez utiliser la bande HTML intégrée du navigateur pour cela au lieu de vous appliquer vous-même une expression rationnelle. Il est plus sécurisé car le navigateur toujours écologique fait le travail pour vous.
angular.module('myApp.filters', []).
filter('htmlToPlaintext', function() {
return function(text) {
return stripHtml(text);
};
}
);
var stripHtml = (function () {
var tmpEl = $document[0].createElement("DIV");
function strip(html) {
if (!html) {
return "";
}
tmpEl.innerHTML = html;
return tmpEl.textContent || tmpEl.innerText || "";
}
return strip;
}());
La raison de l'envelopper dans une fonction à exécution automatique est pour réutiliser la création d'élément.
<div ng-bind-html="myText"></div>
Pas besoin de mettre dans les balises d'interpolation HTML {{}} comme vous l'avez fait {{myText}}.
et n'oubliez pas d'utiliser ngSanitize dans le module, par exemple. var app = angular.module("myApp", ['ngSanitize']);
et ajouter sa dépendance cdn dans la page index.html https://cdnjs.com/libraries/angular-sanitize
Vous pouvez utiliser ng-bind-html, n'oubliez pas d'injecter le service $ sanitize dans votre module.