gpt4 book ai didi

javascript - 如何使用赋值而不是设置值?

转载 作者:行者123 更新时间:2023-12-03 07:53:50 25 4
gpt4 key购买 nike

我正在尝试创建一个 Markdown 编辑器。现在,在这个函数中,我正在处理切换的 B (粗体) 按钮。需要注意的是,我使用this用于从文本区域获取/设置突出显示文本的库。

这是我的功能:(它也有效,一切都很好)

function toggleText(before, after) {
var $textarea = $('#qandatextarea');
var textarea = $textarea[0];
var sel = $textarea.getSelection();
var val = textarea.value;
var posStart = sel.start;
var posEnd = posStart + sel.length;
var posBefore = posStart - before.length;

if (val.substr(posBefore, before.length) == before && val.substr(sel.end, after.length) == after) {
textarea.value = val.slice(0, posBefore) + sel.text + val.slice(sel.end + after.length);
$textarea.setSelection(posBefore, posBefore + sel.length);

} else {

$textarea.surroundSelectedText(before, after);

while(val.substr(posStart, 1) == ' ') {
posStart++;
$textarea.val( textarea.value.replaceAt(posStart + 1, "*").replaceAt(posStart - 1, " ") );
}

while(val.substr(posEnd - 1, 1) == ' ') {
$textarea.val( textarea.value.replaceAt(posEnd + 1, "*").replaceAt(posEnd + after.length + 1, " ") );
posEnd--;
}

// set new highlighted-text
$textarea.setSelection(posStart + before.length, posEnd + before.length);

} // else

} // function

因此,为了使其更加优化,我在循环中使用了赋值而不是 $textarea.val( ,但现在它无法正常工作,它会替换错误的字符并且无法很好地处理空格。

.
.
.
else {

var txtval;
$textarea.surroundSelectedText(before, after);

while(val.substr(posStart, 1) == ' ') {
posStart++;
txtval = textarea.value.replaceAt(posStart + 1, "*").replaceAt(posStart - 1, " ");
}

while(val.substr(posEnd - 1, 1) == ' ') {
txtval = textarea.value.replaceAt(posEnd + 1, "*").replaceAt(posEnd + after.length + 1, " ");
posEnd--;
}

// set textarea value
$textarea.val(txtval);
$textarea.setSelection(posStart + before.length, posEnd + before.length);

}
.
.
.

最佳答案

您的代码似乎有两个问题:

1) 如果字符(“index, 1”或“index - 1, 1”)不是空格,则 while 循环将被绕过/跳过,并且不会进行进一步的替换。

2)您永远不会更新文本区域的值或分配的变量(“val”),这意味着您正在使用相同的字符串而不实际替换任何内容。您可能应该在 while 循环内和最终的“设置文本区域值”中使用“val = ...”而不是“txtval = ...” : $textarea.val(val);

// ... code ...

while(val.substr(posStart, 1) == ' ') {
posStart++;
val = val.replaceAt(posStart + 1, "*").replaceAt(posStart - 1, " ");
}

while(val.substr(posEnd - 1, 1) == ' ') {
val = val.replaceAt(posEnd + 1, "*").replaceAt(posEnd + after.length + 1, " ");
posEnd--;
}

// set textarea value
$textarea.val(val);

// ... code...

关于javascript - 如何使用赋值而不是设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34884811/

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