JavaScript:将选定的文本添加到数组中

3
我的目标:每当用户选择文本并单击按钮时,该文本都会被添加到一个数组中。 问题:每次按下按钮时,数组的所有对象都会被当前选择的文本覆盖掉。 我真的很希望能改变这种行为,以便所选的文本不会覆盖所有先前的数组项。
<script type="text/javascript">
  var selects = new Array();
  selects.push("1");
  function getSelText()
{
    var i = 0;
    while (i<1) {
    var txt = [null];
     if (window.getSelection)
    {
        txt = window.getSelection();
             }
    else if (document.getSelection)
    {
        txt = document.getSelection();
            }
    else if (document.selection)
    {
        txt = document.selection.createRange().text;
    }
    else return;
    selects.push(txt);
    i++;
    };
document.menu.selectedtext.value = selects;
}
</script>


<form class="menu" name="menu">
  <input type="button" value="highlight" class="highlightButton" onmousedown="getSelText()"/>
  <textarea name="selectedtext" rows="5" cols="20"></textarea>
</form>

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
2个回答

3

window.getSelection() 返回一个选择对象,而不是一个字符串,但在打印时它看起来像一个字符串。然后,该数组具有对该选择对象的引用。下次选择对象发生更改,数组引用也会发生更改。您需要在将其放入数组时将选择对象转换为字符串:

selects.push(""+txt);

... 通过 + 运算符,""+ 部分将选择对象转换为字符串。可能还有另一种(更好的)方法来实现这一点...


1

编辑因为我已经弄明白了 :-) 啊啊啊!被打败了!!!

当您直接获取窗口选择对象时,您并没有获取一个干净的不可变字符串。您需要创建一个。尝试像这样设置“txt”:

     txt = '' + window.getSelection();

或者当您将其添加到“selects”中时:

     selects.push('' + txt);

谢谢,我已经删除了我用来调试的“愚蠢代码”。我无法输出一个字符串 - 我需要将每个项目作为单独的值保留,以便稍后可以找到文本。 - joeybaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接