Поочередная замена слов
Есть таблица <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, время: 10:46. |