2012-12-15 46 views
7

我的問題很簡單,但我不知道如何去做。jquery從textarea得到隨機單詞

我有一個textarea與一些文本,我想從文本中得到5個隨機單詞,並把它們放在另一個輸入字段(自動)。我不想成爲特定的單詞。隨機5個單詞。而已。謝謝!

例子:

「Lorem存有悲坐阿梅德,consectetur adipisicing ELIT,SED做 eiusmod tempor incididunt UT labore等dolore麥格納aliqua UT enim廣告 微量veniam,QUIS nostrud實習ullamco laboris暫準UT。 aliquip前EA commodo consequat。在 reprehenderit在voluptate velit埃塞cillum dolore歐盟fugiat法無 pariatur DUIS奧特irure悲。Excepteur燒結靶occaecat cupidatat非proident,必須遵守在 過失魁正式開通了deserunt mollit阿尼姆ID EST laborum。」

輸入字段包含什麼時候寫這個文本讓我們說:ipsum,amet,veniam,velit,deserunt。

+1

你試過了什麼? – charlietfl

+0

這是非常簡單的 - > [** FIDDLE **](http://jsfiddle.net/dDmP8/) – adeneo

+0

好的,它的工作在http://jsfiddle.net/cwrxV/但是當我嘗試把我的網站它不會工作!有什麼問題,請幫我弄清楚。感謝以前的帖子。 我的HTML代碼等於這個,我粘貼在jsfiddle中,我從,從,從外部js文件加載jquery代碼。結果是一樣的......:/ –

回答

4

這是我的工作流程建議:

  1. 獲取來自textarea的文字
  2. 刪除重複項目
  3. 迭代陣列得到的字,並且從該陣列中刪除它(避免重複)

示例代碼:

var text = "Lorem ipsum ......"; 
var words = $.unique(text.match(/\w+/mg)); 
var random = []; 

for(var i=0; i<5; i++) { 
    var rn = Math.floor(Math.random() * words.length); 
    random.push(words[rn]); 
    words.splice(rn, 1); 
} 

alert(random): 

工作示例jsFiddle

+0

+1非常整潔 –

4

這應該工作:

var content = $("#myTextarea").val(), 
    words = content.split(" "); 

var randWords = [], 
    lt = words.length; 

for (var i = 0; i < 5; i++) 
    randWords.push(words[Math.floor(Math.random() * lt)]); 

$("#otherField").val(randWords.join(" ")); 

編輯:爲了避免重複,您可以使用以下命令:

var nextWord; 
for (var i = 0; i < 5; i++) 
{ 
    nextWord = words[Math.floor(Math.random() * lt)]; 
    if (("|" + randWords.join("|") + "|").indexOf("|" + nextWord + "|") != -1) 
    { 
     i--; 
     continue; 
    } 
    randWords.push(nextWord); 
} 
+1

似乎是對的,但你允許重複。 –

+0

您應該檢查數組是否已經包含該字符串,並使用indexOf –

+0

修改代碼以防止重複。 – WebStakker

1

即使較短:

var str = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt.'; 

function rWords(t) { 
    for (var i = 5, s = t.match(/(\d|\w|')+/g), r = [] ; i-- ; r.push(s[ Math.random() * s.length | 0 ])); 
    return r.join(', ').toLowerCase(); 
} 

console.log(rWords(str)); 
> lorem, eiusmod, elit, dolor, do