从JavaScript对象中替换value中的字符串

Replace string in value from an JavaScript object

本文关键字:字符串 value 替换 对象 JavaScript      更新时间:2023-09-26

我有一个JSON文件,其中包含多个<br />标签。使用JSON.parse(json)将文件解析为对象。因为我用AngularJS和ng-repeat绑定数据,我不希望字符串有任何HTML标签,并将其替换为新行'n。我如何替换所有的标签?在我看来,replace()只适用于字符串。

谢谢你的帮助!

JSON示例

{
    "title": "Title",
    "description": "This<br />is<br />a<br />description."
}

JavaScript

var retrievedObject = JSON.parse(json);
$scope.data = retrievedObject;

<div ng-repeat="item in data">
    {{item.description}}
    {{item.description}}
</div>

您可以在解析字符串

之前替换它
var retrievedObject = JSON.parse(json.replace(/'<br '/'>/g, ''));

更好的选择是将字符串解析为HTML并提取不带标记的文本,在将它们插入DOM

之前不使用正则表达式。

有两种方法可以满足您的要求。一个是css,你用'n,然后在你的CSS文件中给元素设置pre-wrap的空白属性。

另一个是角化的。读一下data-ng-bind-html。你就可以得到br的输出。https://docs.angularjs.org/api/ng/directive/ngBindHtml您必须通过$sce过滤器来运行它,以便它是可信的,但您的代码将像以下这样简单:

<div ng-repeat="item in data">
    <span data-ng-bind-html="item.description | trusted"></span>
    <span data-ng-bind-html="item.description | trusted"></span>
</div>

你的可信过滤器应该是这样的:

.filter("trusted", function($sce){
    return function(input){
        return $sce.trustAsHtml(input);
    }
});

ngBindHtml将允许您保留<br> s并在HTML中呈现换行符。它将使用ngSanitize自动消毒您的输入,以去除不在其白名单中的任何标签(您必须将ngSanitize作为依赖项引入)…

var app = angular.module("app", ["ngSanitize"]);

这个视图很简单,就像…

<div ng-bind-html="item.description"></div>

JsBin

您也可以使用$sce.trustAsHtml()告诉ngBindHtml盲目信任HTML而不进行消毒,但只有在您可以完全信任其内容(即,不像用户提交的评论等)时才这样做。