2010-05-23 20 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

相關問題