Как заменить элементы массива?
Такой вопрос (код не надо писать, пока), помогите плиз логикой.
Есть Массив_А (4 картинки) и кнопка СТАРТ. Нажимаешь на кнопку и в ДИВ отображаются эти 4 элемента (картинки). Потом есть МАССИВ_Б (2 картинки в нем) и кнопка ДОБАВИТЬ. Нажимаешь на кнопку первый раз - картинка номер 3 должна пропасть из ДИВа, а вместо нее рандомно вставиться картинка из Массива_Б. Нажимаешь второй раз - картинка номер 4 пропадает из ДИВа, а вместо нее вставляется вторая картинка из Массива_Б. Что меня смущает... у меня есть ДИВ с изначально вставленными туда картинками ... как мне сделать поиск по этому диву, чтобы сначала заменить картинку номер 3, а потом номер 4? Мне кажется это нереально, а надо как-то заново перериовывать этот див ... что-то запутался... |
Ничего тут нереального нет.
поиск
document.querySelectorAll('div img')
рандомная картинка из массива Math.random()*arr.length; заменить или вставить можно функцией .replaceChild .appendChild .insertBefore |
Цитата:
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]); // второй элемент
|
Цитата:
|
<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>
что-то делаете не так! :blink: |
Цитата:
или проверьте "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> |
Как советует один мой друг - учитесь сразу добавлять элементы правильно, чтобы в дальнейшем с кодом не было проблем!
<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]; // Это случайный элемент второго массива синтаксис создания массива будет более компактный через литерал массива. |
| Часовой пояс GMT +3, время: 19:16. |