2010-05-23 93 views
3

我的目标:每次用户选择文本,然后单击按钮时,该文本将被添加到数组中。 问题:每次按下按钮时,数组的所有对象都会被当前选定的文本覆盖。Javascript:将选定的文本添加到数组

我真的很感谢帮助改变行为,以便选定的文本不会覆盖所有以前的数组项目。

<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> 

回答

3

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

Selecting.push(“”+ txt);

...“”+位通过+运算符将选择对象转换为字符串。有可能是另一种(更好)的方式来做到这一点...

1

编辑,因为我想通了:-) AAA!挨打!

当你直接抓住窗口选择对象时,你并没有抓住干净的不可变字符串。你需要制作一个。尝试设置“TXT”是这样的:

 txt = '' + window.getSelection(); 

,或者当您将它添加到“选择”:

 selects.push('' + txt); 
+0

谢谢,我拿出了我用来调试的'愚蠢的代码'。 我无法输出字符串 - 我需要维护每个项目作为单独的值,所以我可以稍后找到文本。 – joeybaker 2010-05-23 20:25:57