Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.06.2017, 21:16
Интересующийся
Отправить личное сообщение для webxmm Посмотреть профиль Найти все сообщения от webxmm
 
Регистрация: 15.03.2017
Сообщений: 29

Как заменить элементы массива?
Такой вопрос (код не надо писать, пока), помогите плиз логикой.

Есть Массив_А (4 картинки) и кнопка СТАРТ.
Нажимаешь на кнопку и в ДИВ отображаются эти 4 элемента (картинки).

Потом есть МАССИВ_Б (2 картинки в нем) и кнопка ДОБАВИТЬ.
Нажимаешь на кнопку первый раз - картинка номер 3 должна пропасть из ДИВа, а вместо нее рандомно вставиться картинка из Массива_Б.
Нажимаешь второй раз - картинка номер 4 пропадает из ДИВа, а вместо нее вставляется вторая картинка из Массива_Б.

Что меня смущает... у меня есть ДИВ с изначально вставленными туда картинками ... как мне сделать поиск по этому диву, чтобы сначала заменить картинку номер 3, а потом номер 4? Мне кажется это нереально, а надо как-то заново перериовывать этот див ... что-то запутался...
Ответить с цитированием
  #2 (permalink)  
Старый 20.06.2017, 21:41
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Ничего тут нереального нет.
поиск
document.querySelectorAll('div  img')

рандомная картинка из массива
Math.random()*arr.length;

заменить или вставить можно функцией
.replaceChild
.appendChild
.insertBefore
Ответить с цитированием
  #3 (permalink)  
Старый 20.06.2017, 22:41
Интересующийся
Отправить личное сообщение для webxmm Посмотреть профиль Найти все сообщения от webxmm
 
Регистрация: 15.03.2017
Сообщений: 29

Сообщение от j0hnik Посмотреть сообщение
Ничего тут нереального нет.
поиск
document.querySelectorAll('div  img')
Вот это меня и интересовало... пробую так
var asd = document.body.querySelectorAll('div.imgArr > img');
	alert(asd);

То есть я пытаюсь найти все элементы IMG (которые с массива я вывожу) в диве с классом .imgArr и ради интереса посмотрел, что мне алерт вывел. А вывел он [object nodeList] .. Это что такое?

Хотя в конечно итоге мне надо получить сначала элемент номер 3, а потом 4 ...
Ответить с цитированием
  #4 (permalink)  
Старый 20.06.2017, 23:09
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от webxmm Посмотреть сообщение
Вот это меня и интересовало... пробую так
var asd = document.body.querySelectorAll('div.imgArr > img');
	alert(asd);

То есть я пытаюсь найти все элементы IMG (которые с массива я вывожу) в диве с классом .imgArr и ради интереса посмотрел, что мне алерт вывел. А вывел он [object nodeList] .. Это что такое?

Хотя в конечно итоге мне надо получить сначала элемент номер 3, а потом 4 ...
все потому что это коллекция узлов
var asd = document.body.querySelectorAll('div.imgArr > img');
alert(asd[0]); // первый элемент
alert(asd[1]); // второй  элемент
Ответить с цитированием
  #5 (permalink)  
Старый 20.06.2017, 23:18
Интересующийся
Отправить личное сообщение для webxmm Посмотреть профиль Найти все сообщения от webxmm
 
Регистрация: 15.03.2017
Сообщений: 29

Сообщение от j0hnik Посмотреть сообщение
все потому что это коллекция узлов
var asd = document.body.querySelectorAll('div.imgArr > img');
alert(asd[0]); // первый элемент
alert(asd[1]); // второй  элемент
Попробовал так. Выводит Undefined
Ответить с цитированием
  #6 (permalink)  
Старый 20.06.2017, 23:27
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<html lang="en">
<head>
	<meta charset="utf-8">
</head>
<body>
<div><img src="" alt=""></div>
<div><img src="" alt=""></div>
<div><img src="" alt=""></div>
<script>
var asd = document.querySelectorAll('div > img');
alert(asd[0]); // первый элемент
alert(asd[1]); // второй  элемент

	</script>
</body>
</html>


что-то делаете не так!
Ответить с цитированием
  #7 (permalink)  
Старый 21.06.2017, 01:23
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от webxmm Посмотреть сообщение
Попробовал так. Выводит Undefined
возможно у вас скрипт перед элементами HTML из за этого не работает

или проверьте "div.imgArr > img" есть ли у вас дивы с классом imgArr с прямыми потомками img
Ответить с цитированием
  #8 (permalink)  
Старый 23.06.2017, 13:44
Интересующийся
Отправить личное сообщение для webxmm Посмотреть профиль Найти все сообщения от webxmm
 
Регистрация: 15.03.2017
Сообщений: 29

Сообщение от j0hnik Посмотреть сообщение
возможно у вас скрипт перед элементами HTML из за этого не работает

или проверьте "div.imgArr > img" есть ли у вас дивы с классом imgArr с прямыми потомками img
Спасибо, я просто вместо класса ИД прописал.
Попробовал теми функциями, что вы предложили (не совсем получилос, в коде кстати закомментированный код - это как я по-разному пытался).
Сделал так, посмотрите плз, правильно ли так(но там есть одна проблема. У меня заменяется последняя картинка - ОК. Но если я хочу сначала заменить предпоследнюю, а потом последнюю, то не выходит).
Код.

var arr = new Array("img/blue.jpg", "img/bline2.jpg", "img/close.png");
	  var arrRep = new Array("img/site.jpg", "img/x5.jpg");
	  
		function getImg(){
			
			for(var i = 0; i < arr.length; i++){
				document.getElementById("imgArr").innerHTML += "<img src=" + arr[i] + " />";
			}
		}

		function replaceImg(){
			var asd = document.querySelectorAll('div#imgArr > img');
			var willBeReplace = asd[2].parentNode.removeChild(asd[2]); 
			//alert(asd[2]);
			 var addedElemen = arrRep[1];
			document.getElementById("imgArr").innerHTML += "<img src=" + addedElemen + " />";
			
			
			//var  aaa = willBeReplace.replaceChild(addedElemen, willBeReplace.childNodes[0]);
			//alert(willBeReplace);
			
			// Create a new text node called "Water"
			//var textnode = arrRep[1];
			//alert(textnode);

			// Get the first child node of an <ul> element
			//var item = document.getElementById("imgArr").childNodes[2];
			//alert(item);
			//var item = document.querySelectorAll('div#imgArr > img');
			//alert(item[2]);

			// Replace the first child node of <ul> with the newly created text node
			//document.getElementById("imgArr").innerHTML = item.replaceChild(textnode, item.childNodes[2]);
			
			//alert(item);

<div class="animated" id="imgArr">
	</div>
	
	<div>
		<input type="button" value="Start" OnClick="getImg();" />
		<input type="button" value="Replace" OnClick="replaceImg();" />
	</div>
<div>
Ответить с цитированием
  #9 (permalink)  
Старый 23.06.2017, 16:06
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Как советует один мой друг - учитесь сразу добавлять элементы правильно, чтобы в дальнейшем с кодом не было проблем!
<html>
<head>
	<meta charset="utf-8">
</head>
<body>
	<div class="animated" id="imgArr"></div>	
	<div>
		<input type="button" value="Start"  id="id"/>
		<input type="button" value="Replace" id="id2"/>
	</div>
	<div>
		<script>
			var arr = ["img/blue.jpg", "img/bline2.jpg", "img/close.png"];
			var arrRep = ["img/site.jpg", "img/x5.jpg"];

			var el = document.getElementById('imgArr');

			document.getElementById("id").addEventListener('click', function(e) {
				for(var i=0; i<arr.length; i++ ){
					var img = document.createElement('img');
					img.src = arr[i]; 
					el.appendChild(img);
					this.removeEventListener(e.type, arguments.callee);
				}
			}, false);
		</script>
	</body>
	</html>

вот так мы добавляем, дальше пробуйте сами сделать замену

var rand = Math.floor(Math.random()*arrRep.length);
arrRep[rand]; // Это случайный элемент второго массива


синтаксис создания массива будет более компактный через литерал массива.

Последний раз редактировалось j0hnik, 23.06.2017 в 18:47.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверить или ВСеЕ элементы массива имеют определенное значение Velidan Общие вопросы Javascript 2 16.02.2015 13:26
Как улучшить сортировку массива? Armen Общие вопросы Javascript 3 12.10.2014 20:17
почти одинаковые элементы массива mcavalon Общие вопросы Javascript 3 24.01.2013 11:04
Как выбрать из json-массива только не повторяющиеся элементы? Dimaz Общие вопросы Javascript 3 19.12.2012 00:11
Как удалить из набора элементы у которых дисплей нан KamalovRadik jQuery 3 30.10.2011 16:11