【问题标题】:How to use assignment instead of setting value?如何使用赋值而不是设置值?
【发布时间】:2016-04-25 09:35:44
【问题描述】:

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

这是我的功能:(它也可以,一切正常)

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)您永远不会更新 textarea 或字符串变量(“val”)的值,这意味着您正在使用相同的字符串而不实际替换任何内容。您可能应该在 while 循环和最终的“设置 textarea 值”中使用“val = ..:”而不是“txtval = ...”:$textarea.val(val);请参阅答案部分中的格式化代码(将 #34887329 放在 URL 中以跳转到答案)。

标签: javascript jquery string assignment-operator


【解决方案1】:

看来你的代码有两个问题:

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

2) 您永远不会更新 textarea 或分配的变量 ("val") 的值,这意味着您正在使用相同的字符串而不实际替换任何内容。您可能应该在 while 循环和最终的“设置 textarea 值”中使用“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... 

【讨论】:

    猜你喜欢
    • 2018-11-12
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多