Поочередная замена слов
Есть таблица <table><tbody><tr><td>.....
Есть массив со строками: Женя, Яша, Витя, Ваня, Юля В таблице 300 строк к примеру, нужно первое слово каждой ячейки (<td>) заменить поочередно подставляя слова из массива! Помогите с реализацией пожалуйста! |
Например первое слово каждой ячейки: Виталька
Вот нужно в каждой ячейке заменить его на (по очереди) в первой строке это будет Женя, во второй будет Яша и так далее. И еще как в массив записать строки из textarea, что бы они выступали в качестве слов? |
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>title</title> </head> <body> <table id="myTable"> <tr><td>Виталий курит</td></tr> <tr><td>Виталий спит</td></tr> <tr><td>Виталий-ломоносов пьет</td></tr> <tr><td>Виталий помер</td></tr> </table> <textarea id="myTextarea"></textarea> <button onclick="foo()">Погнали</button> <script type="text/javascript"> var textarea = document.getElementById('myTextarea'); var table = document.getElementById('myTable'); function foo (argument) { var arr = textarea.value.split('\n'); var r = table.rows; for(var i = 0; i < r.length; i++) { if (i < arr.length) r[i].cells[0].innerHTML = r[i].cells[0].innerHTML.replace(/^[^\s]+/, arr[i]); } } textarea.value = 'женя\nвася\nпаша'; //чтобы не вводить вручную </script> </body> </html> |
Попытался вставить в свой уже готовый код, но страница зависает!
<!DOCTYPE html><html><head> <meta http-equiv='Content-Type' content='text/html; charset=windows-1251' /> <script src='http://code.jquery.com/jquery-latest.js'></script> <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> <style type='text/css'> body {margin: auto;} textarea {height: 100px;width: 30%;margin: auto;border: none;background: #eee;outline: none;} #rescount {width: 8%;height: 100px;background: #eee;display: inline-block;position: fixed;padding: 5px;text-align: center;font-size: 4em;} #rescount span {font-size: 12px;} .generate {width: 100%;height: 30px;border: none;background: #eee;outline: none;} table, td {width: 100%;} td {background:#c2ff9b;} </style> <script type='text/javascript'> function test(){ var cols=0; var arr=[ document.getElementById('gruz').value.split(/\n/), document.getElementById('gorod').value.split(/\n/), document.getElementById('avto').value.split(/\n/) ]; var or=document.getElementById('result'); var rc=document.getElementById('rescount'); for (var i=0; i<arr[0].length; i++) { for (var j=0; j<arr[1].length; j++) { for (var k=0; k<arr[2].length; k++) { var str=arr[0][i]+' '+arr[1][j]+' '+arr[2][k]; for(var i = 0; i < or.length; i++) { if (i < arr[0].length) or[i].cells[0].innerHTML = or[i].cells[0].innerHTML.replace(/^[^\s]+/, arr[0][i]); } cols=cols+1; or.innerHTML=or.innerHTML+'<td>'+str+'</td>'; }; }; }; rc.innerHTML=cols; }; </script> </head><body> <textarea id="gruz">Коля Вася Витя</textarea> <textarea id="gorod">Любит Не любит</textarea> <textarea id="avto">Машу Дашу Иру</textarea> <div id="rescount"></div> <br/> <input type="button" onclick='test();' class="generate" value="СГЕНЕРИРОВАТЬ"/> <table><tbody id="result"></tbody></table></body></html> |
что вы хотите сделать? сможете полностью описать задачу? наверно вам надо вставлять мой цикл после rc.innerHTML=cols;
|
Помогите перестроить скрипт!
Ниже приведенный скрипт выполняет функцию генератора комбинаций из 3-х полей textarea <!DOCTYPE html> <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=windows-1251' /> <script src='http://code.jquery.com/jquery-latest.js'></script> <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> <style type='text/css'> body { margin: auto; } textarea { height: 100px; width: 30%; margin: auto; border: none; background: #eee; outline: none; } #rescount { width: 8%; height: 100px; background: #eee; display: inline-block; position: fixed; padding: 5px; text-align: center; font-size: 3em; } #rescount span { font-size: 12px; } .generate { width: 100%; height: 30px; border: none; background: #eee; outline: none; } table, td { width: 100%; } td { background:#c2ff9b; } </style> <script type='text/javascript'> function test(){ var cols=0; var vrs=document.getElementById('gruz').value.replace(/\s+/g, 'SP').split(','); //записываю в массив слова разделяя их при этом запятой document.getElementById('gruz').value=vrs; var arr=[ document.getElementById('gruz').value.split(/\n/), document.getElementById('gorod').value.split(/\n/), document.getElementById('avto').value.split(/\n/) ]; var or=document.getElementById('result'); var rc=document.getElementById('rescount'); or.innerHTML=''; rc.innerHTML=''; for (var i=0; i<arr[0].length; i++) { for (var j=0; j<arr[1].length; j++) { for (var k=0; k<arr[2].length; k++) { var rnd = Math.floor(Math.random() * vrs.length); var str=arr[0][i].replace(/^\S+/,vrs[rnd].replace('SP', ' '))+' '+arr[1][j]+' '+arr[2][k]; //пробую менять первое слово на случайное из массива который ранее создавал cols=cols+1; or.innerHTML=or.innerHTML+'<td>'+str+'</td>'; }; }; }; rc.innerHTML=cols; }; </script> </head> <body> <textarea id="gruz"> Саня,Леха,Толик Яша,Серый,Ваня</textarea> <textarea id="gorod"> Любит Не любит</textarea> <textarea id="avto"> Олю Надю Иру</textarea> <div id="rescount"></div> <br/><input type="button" onclick='test();' class="generate" value="СГЕНЕРИРОВАТЬ"/> <table><tbody id="result"></tbody></table> </body> </html> С помощью местных гуру и великого гугла, мне удалось переделать в первом поле textarea смысл выполнения, а именно: Теперь значения из первого поля с помощью запятой режутся в массив после чего случайным образом подставляются в комбинации, но если добавить еще одну строку в это поле, да еще и разделить ее запятыми то получу не совсем то что нужно. Скрипт будет пихать всех под ряд и Колю и Васю и Диму... Да бы вы меня смогли понять, скрипт берет из всех полей количество строк, а так же их значение и комбинирует их! Пример: в первом поле 3 значения во втором 2 и в третьем тоже 3, на выходе получим 18 комбинаций из этих слов. Сейчас скрипт переделал, что бы из первого поля строки резало еще и на слова (так сказать варианты подстановки) то есть, не всю строку, а только случайное слово из этой строки которые поделены запятыми. Все вроде бы окей, но теперь скрипт не выполняет первоначальную функцию, а именно нарезание на строки, он убирает переносы и записывает все это дело в одну строку. Еще и с реплейсерами я там намудрил... |
Как я понимаю логику:
//1. Запишем в arr[0,1,2] нарезанные строки из полей. //2. Запишем в vrs[arr[0].length] нарезанные с помощью заятой слова. //3. с помощью функции math.random выведем случайное слово str=vrs[random].[i]+' '+arr[1].[j]+' '+arr[2].[k]; |
Помогите составить правильный код, пожалуйста!
|
Неужель никто не поможет?
|
Так что ли?
<textarea id="gruz"> Саня,Леха,Толик Яша,Серый,Ваня</textarea> <textarea id="gorod"> Любит Не любит</textarea> <textarea id="avto"> Олю Надю Иру</textarea> <ol></ol> <script> var gruz = document.getElementById('gruz').innerHTML; gruz = gruz.replace(/\n/g, ',').split(','); var gorod = document.getElementById('gorod').innerHTML; gorod = gorod.split(/\n/); var avto = document.getElementById('avto').innerHTML; avto = avto.split(/\n/); function rand(item) { return item[Math.round(Math.random() * (item.length - 1))]; } var data = []; gruz.forEach(function(first) { avto.forEach(function(second) { data.push(first + ' ' + rand(gorod) + ' ' + second); }); }); // это для примера data.forEach(function(item) { document.querySelector('ol').innerHTML += '<li>' + item + '</li>'; }); </script> |
Часовой пояс GMT +3, время: 01:07. |