【发布时间】:2021-04-05 04:20:40
【问题描述】:
我正在 Angular 中工作,试图创建一个填充空白的逻辑,用户可以在 textarea 中输入文本,然后从一个句子中创建尽可能多的空白。
例如: “这是一碗水果”
如果用户决定将“碗”设为空白,他们只需在其周围放置 2 个括号或单击一个按钮,上述句子将更改为
“这是 [[碗]] 水果。”
如果用户决定选择单词并单击按钮使空白变为空白,我有以下代码。
html.component
<textarea (ngModel)]="blankText" #blankArea rows="4" cols="50"></textarea>
<button class="btn btn-link" (click)="makeBlank(blankArea.selectionStart, blankArea.selectionEnd)">Make Blank</button>
组件.ts
makeBlank(start, end) {
this.blankStatement = [];
let result;
let sentence = this.blankText;
let blankStart = '[[';
let blankEnd = ']]';
result = sentence.slice(0, start) + blankStart + sentence.slice(start);
end = end + 2;
result = result.slice(0, end) + blankEnd + result.slice(end);
this.blankText = result;
//Get Blank Data
var part = result.substring(
result.lastIndexOf('[[') + 2,
result.lastIndexOf(']]')
);
let obj = {
blank: part,
};
this.blanks.push(obj); //This saves the blank word i.e "Bowl"
}
我想要实现的是获取以下格式的数据:
blankStatement =
[
{type: "Text", text: "This is a"},
{type: "Word", blank:"bowl"},
{type:"Text", text:"of fruit"}
]
空格前后的文字是type:Text。空白处的文本是类型:“Word”。 我能够将空白前后的文本设为:
let preText = this.blankText.substring(0, preText.indexOf('['));
let postText = this.blankText.split(']').pop();
问题
如果我再做一个空白,让我们从句子“这是 [[bowl]] of Fruit”中说,我也将“Fruit”作为空白,这是 [[Fruit]] 的 [[bowl]]。 那我怎样才能实现如下数组:
blankStatement =
[
{type: "Text", text: "This is a"},
{type: "Word", blank:"bowl"},
{type: "Text", text:"of"},
{type: "Word", blank:"fruit" }
]
【问题讨论】:
-
我在我的一个项目中做过这个 - 所以把它当作一个建议 - blankStatement = { text: "This is a [[bowl]] of [[Fruit]]" 空白: [ {wordIndex: 3, blank:"bowl"}, {wordIndex: 5, blank:"fruit" } ] } 因此,如果您跟踪单词索引,它将帮助您解析和添加空白。
标签: javascript arrays string ecmascript-6 logic