Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.04.2018, 00:48
Аспирант
Отправить личное сообщение для JohnJohn Посмотреть профиль Найти все сообщения от JohnJohn
 
Регистрация: 04.06.2017
Сообщений: 46

альтернатива appendChild
Добрый, подскажите, а есть альтернатива appendChild, которая при повторном appendChild в тот же div, будет перезаписывать первый и т.д.
Объясню более подробно, у меня есть div и три кнопки(так же есть три div с каким то контентом, которые по умолчанию display:none). Мне нужно, что бы при нажатии на кнопку в div(который один), подтягивался div(один из трех, который при нажатии будет получать display:flex). Если это делать при помощи appendChild, тогда все divы будут добавляться, а мне надо, что бы при нажатии на кнопки подтягивались определенные div и исчезали те, которые аппендились ранее. Спасибо.
Если плохо объяснил, простите.
Ответить с цитированием
  #2 (permalink)  
Старый 13.04.2018, 00:52
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

el.parentNode.replaceChild(newChild, oldChild);
Ответить с цитированием
  #3 (permalink)  
Старый 13.04.2018, 00:56
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

или как по старинке,
старый удаляем
el.parentNode.removeChild(OldEl);

новый вставляем
el.parentNode.appendChild(NewEl);
Ответить с цитированием
  #4 (permalink)  
Старый 13.04.2018, 01:07
Аспирант
Отправить личное сообщение для JohnJohn Посмотреть профиль Найти все сообщения от JohnJohn
 
Регистрация: 04.06.2017
Сообщений: 46

а если у меня oldChild много, например 7 кнопок и 7 соответственно div'ов, получается указав el.parentNode.replaceChild(2, 1); нажав на 3 он доваится ко 2. Может я не так конечно понял.
Ответить с цитированием
  #5 (permalink)  
Старый 13.04.2018, 01:15
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

если у вас в родительском элементе много дивов которые нужно заменить на один и больше ничего нужно нет то так.
el.innerHTML = <div>NEW-EL</div>;

а если в родительском элементе нужно удалять не все, а выборочно то так
el.parentNode.removeChild(OldEl);
el.parentNode.removeChild(OldEl2);
el.parentNode.removeChild(OldEl3);


новый вставляем
el.parentNode.appendChild(NewEl);
Ответить с цитированием
  #6 (permalink)  
Старый 13.04.2018, 01:23
Аспирант
Отправить личное сообщение для JohnJohn Посмотреть профиль Найти все сообщения от JohnJohn
 
Регистрация: 04.06.2017
Сообщений: 46

ну да, второй вариант подходит, кода конечно много будет, спасибо большое
Ответить с цитированием
  #7 (permalink)  
Старый 13.04.2018, 10:07
Аспирант
Отправить личное сообщение для JohnJohn Посмотреть профиль Найти все сообщения от JohnJohn
 
Регистрация: 04.06.2017
Сообщений: 46

Хотя, removeChild не совсем подходит, потому что каждый div, который аппендится при клике на кнопку берет el.style.display = 'flex'. Вот так работает норм - el.parentNode.appendChild(NewEl); остальные el2.parentNode.style.display = 'none';
el3.parentNode.style.display = 'none';
el4.parentNode.style.display = 'none';

Но кода конечно получается очь много.
Ответить с цитированием
  #8 (permalink)  
Старый 13.04.2018, 11:43
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Да хоть 100500 штук - скрипт один и тот же.
<div>
   <button value='i1'>Button1</button>
   <button value='i2'>Button2</button>
   <button value='i3'>Button3</button>
   <div id='i1' class='cont' style='display:none'>Content 1</div>
   <div id='i2' class='cont' style='display:none'>Content 2</div>
   <div id='i3' class='cont' style='display:none'>Content 3</div>
</div>
<script>
  [].forEach.call(document.querySelectorAll('button'), function(item) {
        item.onclick = function() {
            [].forEach.call(document.querySelectorAll('.cont'), function(el) {
                el.id == item.value ? el.style.display = 'flex': el.style.display = 'none';
            })
        }
  });
</script>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
appendChild is not a function Yaroma11 Events/DOM/Window 2 08.05.2014 14:36
проблема с appendChild Sivik Общие вопросы Javascript 10 01.02.2014 18:16
Как поправить расположение элементов appendChild()? gudron Events/DOM/Window 1 17.10.2013 08:14
jQuery Feature Carousel Plugin - Есть ли альтернатива? lraido AJAX и COMET 0 09.11.2011 21:39
mouseOver после appendChild shilinpavel Элементы интерфейса 4 21.09.2011 21:24