2012-12-15 17 views
7

moje pytanie jest bardzo proste, ale nie mogę dowiedzieć się, jak to zrobić.Jquery uzyskać losowe słowa z textarea

Mam textarea z tekstem i chcę uzyskać 5 losowych słów z tekstu i umieścić je w innym polu wprowadzania danych (automatyczne). Nie chcę być konkretnymi słowami. Losowo 5 słów. to jest to! Dzięki!

przykład:

„Lorem ipsum dolor sit amet, consectetur adipisicing elit SED do eiusmod tempor incididunt ut Labore et dolore magna aliqua Ut ad enim minima veniam, Quis nostrud exercitation ullamco laboris NiSi UT. aliquip ex ea Commodo consequat. Duis Aute Irure ból w reprehenderit w voluptate velit esse cillum dolore ue fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt w culpa qui officia deserunt mollit anim id est laborum „.

Pole wejściowe, które zawiera, gdy tekst jest pisany, powiedzmy: ipsum, amet, veniam, velit, deserunt.

+1

co próbowaliście? – charlietfl

+0

To jest całkiem proste -> [** FIDDLE **] (http://jsfiddle.net/dDmP8/) – adeneo

+0

Ok, to działa w http://jsfiddle.net/cwrxV/, ale kiedy próbuję wstawić moja strona to nie zadziała! W czym problem, pomóż mi to rozgryźć. Dzięki za poprzednie posty. Mój kod HTML jest równy temu, który wkleiłem w jsfiddle i załaduję kod jquery z , z , z zewnętrznego pliku js. Wynik jest taki sam ...:/ –

Odpowiedz

4

To jest moja propozycja dla przepływu pracy:

  1. Get słowa z textarea
  2. Usuń duplikaty
  3. Iterate tablica dostać słowo i usunąć je z tablicy (uniknąć duplikatów)

przykładowy kod:

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

przykład pracując w jsFiddle

+0

+1 bardzo schludnie –

4

To powinno działać:

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(" ")); 

EDIT: Aby uniknąć duplikatów, można użyć następujących:

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

wydaje się właściwy, ale dopuszczasz duplikaty. –

+0

Powinieneś sprawdzić, czy tablica zawiera już ten ciąg, czy nie, z indeksemOf –

+0

Kod został ulepszony, aby zapobiec duplikatom. – WebStakker

1

jeszcze krócej:

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