【发布时间】:2017-05-25 08:59:39
【问题描述】:
我正在尝试创建一些写作工具,用于检查某些单词是否针对我的 API 进行标记。这个想法是在用户仍在键盘上键入或完成键入时动态标记单词(在匹配的单词下画红色下划线)。
现在开始,我使用下一个函数来确定用户何时停止输入 1-2 秒(这是获取文本并将其发送到我的 API 的正确时机):
debounce: function (func, wait, immediate) {
var timeout;
return function () {
var context = this, args = arguments;
var later = function () {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
并像这样使用它:
$(this).on('keyup', debounce(function () {
check_words($(this).html());
}, 1000));
所以当我有当前的句子(用户仍然可以继续输入)时,我使用 check_words 函数将 AJAX 调用发送到我的 API 以检查哪些单词应该是标记。
API 返回 JSON 响应如下所示: (例如句子:“你好,我叫 Bob”):
{
"markup": [{
"fromPos": 7,
"toPos": 8,
"word": "my"
}, {
"fromPos": 15,
"toPos": 16,
"word": "is"
}
}
所以这意味着 2 个单词应该是标记(“my”和“is”),我也得到了句子上的单词索引位置,问题是我找不到解决方案/方法如何替换那个单词使用词索引位置的元素?
知道哪个 JS 函数可以帮助我实现这个目标吗?
【问题讨论】:
-
既然你有单词的开始和结束位置,你有没有试过这个解决方案stackoverflow.com/a/2236257/1593188
-
但是我怎样才能在元素本身上执行这个解决方案呢? (因为我无法使用源内容,因为从那时起它可能会再次更改 - 用户可能仍在输入)
-
一种天真的方法是将开始和结束位置之间的内容与 ajax 调用中的“word”进行比较,如果它们相似,请替换它,否则根据当前文本进行另一个 ajax 调用。
标签: javascript jquery