Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.10.2015, 13:43
Аватар для karakym
Профессор
Отправить личное сообщение для karakym Посмотреть профиль Найти все сообщения от karakym
 
Регистрация: 21.02.2010
Сообщений: 213

Поочередная замена слов
Есть таблица <table><tbody><tr><td>.....
Есть массив со строками: Женя, Яша, Витя, Ваня, Юля
В таблице 300 строк к примеру, нужно первое слово каждой ячейки (<td>) заменить поочередно подставляя слова из массива!
Помогите с реализацией пожалуйста!
Ответить с цитированием
  #2 (permalink)  
Старый 01.10.2015, 13:46
Аватар для karakym
Профессор
Отправить личное сообщение для karakym Посмотреть профиль Найти все сообщения от karakym
 
Регистрация: 21.02.2010
Сообщений: 213

Например первое слово каждой ячейки: Виталька
Вот нужно в каждой ячейке заменить его на (по очереди) в первой строке это будет Женя, во второй будет Яша и так далее.
И еще как в массив записать строки из textarea, что бы они выступали в качестве слов?
Ответить с цитированием
  #3 (permalink)  
Старый 01.10.2015, 17:23
Аватар для sanmihan
Аспирант
Отправить личное сообщение для sanmihan Посмотреть профиль Найти все сообщения от sanmihan
 
Регистрация: 28.05.2015
Сообщений: 54

<!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>
Ответить с цитированием
  #4 (permalink)  
Старый 01.10.2015, 21:19
Аватар для karakym
Профессор
Отправить личное сообщение для karakym Посмотреть профиль Найти все сообщения от karakym
 
Регистрация: 21.02.2010
Сообщений: 213

Попытался вставить в свой уже готовый код, но страница зависает!
<!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>

Последний раз редактировалось karakym, 01.10.2015 в 21:21.
Ответить с цитированием
  #5 (permalink)  
Старый 02.10.2015, 08:08
Аватар для sanmihan
Аспирант
Отправить личное сообщение для sanmihan Посмотреть профиль Найти все сообщения от sanmihan
 
Регистрация: 28.05.2015
Сообщений: 54

что вы хотите сделать? сможете полностью описать задачу? наверно вам надо вставлять мой цикл после rc.innerHTML=cols;
Ответить с цитированием
  #6 (permalink)  
Старый 02.10.2015, 13:46
Аватар для karakym
Профессор
Отправить личное сообщение для karakym Посмотреть профиль Найти все сообщения от karakym
 
Регистрация: 21.02.2010
Сообщений: 213

Помогите перестроить скрипт!
Ниже приведенный скрипт выполняет функцию генератора комбинаций из 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 комбинаций из этих слов.
Сейчас скрипт переделал, что бы из первого поля строки резало еще и на слова (так сказать варианты подстановки) то есть, не всю строку, а только случайное слово из этой строки которые поделены запятыми.
Все вроде бы окей, но теперь скрипт не выполняет первоначальную функцию, а именно нарезание на строки, он убирает переносы и записывает все это дело в одну строку. Еще и с реплейсерами я там намудрил...

Последний раз редактировалось karakym, 02.10.2015 в 14:53.
Ответить с цитированием
  #7 (permalink)  
Старый 02.10.2015, 16:59
Аватар для karakym
Профессор
Отправить личное сообщение для karakym Посмотреть профиль Найти все сообщения от karakym
 
Регистрация: 21.02.2010
Сообщений: 213

Как я понимаю логику:
//1. Запишем в arr[0,1,2] нарезанные строки из полей.
//2. Запишем в vrs[arr[0].length] нарезанные с помощью заятой слова.
//3. с помощью функции math.random выведем случайное слово
str=vrs[random].[i]+' '+arr[1].[j]+' '+arr[2].[k];
Ответить с цитированием
  #8 (permalink)  
Старый 03.10.2015, 11:38
Аватар для karakym
Профессор
Отправить личное сообщение для karakym Посмотреть профиль Найти все сообщения от karakym
 
Регистрация: 21.02.2010
Сообщений: 213

Помогите составить правильный код, пожалуйста!
Ответить с цитированием
  #9 (permalink)  
Старый 05.10.2015, 22:42
Аватар для karakym
Профессор
Отправить личное сообщение для karakym Посмотреть профиль Найти все сообщения от karakym
 
Регистрация: 21.02.2010
Сообщений: 213

Неужель никто не поможет?
Ответить с цитированием
  #10 (permalink)  
Старый 06.10.2015, 02:29
Аватар для Lemme
Профессор
Отправить личное сообщение для Lemme Посмотреть профиль Найти все сообщения от Lemme
 
Регистрация: 15.07.2015
Сообщений: 511

Так что ли?
<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>

Последний раз редактировалось Lemme, 06.10.2015 в 02:55.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск и замена слов по списку EvgenStor Общие вопросы Javascript 40 26.09.2017 03:29
document.body.innerHTML.replace. Замена нескольких слов nule Общие вопросы Javascript 10 11.03.2015 16:14
подсчёт не слов, букв Александр х@к Элементы интерфейса 8 29.08.2011 17:22
Замена слов в тексте Dan T Общие вопросы Javascript 8 18.03.2009 12:36
добавление окошка в скрипт подсчета слов Гость Общие вопросы Javascript 10 11.03.2008 17:07