Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Удаление объекта по клику (https://javascript.ru/forum/events/60464-udalenie-obekta-po-kliku.html)

JoeCocker 01.01.2016 14:06

Удаление объекта по клику
 
Люди, поможите, кто-нибудь!)

Мой скрипт создает сотню дивов, так же есть рабочая кнопка "+1 див".
Но вот я бы хотел что бы при нажатии на див, он удалялся. На jquery я бы это легко сделал, но хочется научиться на ванильном JS.
Научите пожалуйста, как это делается?


<div id="container">
 
</div>

<button onClick="addNode()">+1 circle</button>


var container = document.getElementById('container');
	var div = document.getElementsByClassName('circle');

 	// add div in container
	var addNode = function() {
		div = document.createElement('div');
			div.className = 'circle';
		container.appendChild(div);
	};

	// how much? 100
	for(i = 0; i < 100; i++) {
		addNode();
	}   


	div.onClick = function(event) {
		console.log(this.event);
	};

ruslan_mart 01.01.2016 14:08

div.onclick = function() {
   container.removeChild(this);
};

JoeCocker 01.01.2016 14:20

Спасибо, родной!
Но я наблюдаю глюк с этим: удаляется только один последний элемент.

ruslan_mart 01.01.2016 14:25

JoeCocker, Вам нужно всех детей удалить или что?

while(container.firstChild) {
   container.removeChild(container.firstChild);
}

JoeCocker 01.01.2016 14:34

Спасибо, теперь у меня есть кнопка -1 с конца))

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

ruslan_mart 01.01.2016 14:41

JoeCocker, так вашайте клик на созданный div. :)

div.onclick = function() {
   container.removeChild(this);
};

JoeCocker 01.01.2016 14:52

Не срабатывает.

Вот что сейчас имеем: http://js.do/code/78280

ruslan_mart 01.01.2016 14:55

var container = document.getElementById('container');
	var div = document.getElementsByClassName('circle');
    
    function removeDiv() {
    	container.removeChild(this);
    };

 	// add div in container
	var addNode = function() {
		div = document.createElement('div');
			div.className = 'circle';
        div.onclick = removeDiv;
		container.appendChild(div); // insert div
	};

	// how much? 100
	for(var i = 0; i < 100; i++) {
		addNode();
	}   


	var removeNode = function() {
		container.removeChild(container.lastChild); // remove div

	};

JoeCocker 01.01.2016 15:18

О, да! ))

Буду благодарен за расшифровку строки
div.onclick = removeDiv;

ruslan_mart 01.01.2016 15:21

JoeCocker, присвоение функции.

Аналогично:

div.onclick = function() {
    container.removeChild(this);
};


Только этот аналог плох тем, что каждый раз новая функция создаётся. Мы же, уже заранее определили функцию removeDiv и просто её присваиваем каждый раз.


Часовой пояс GMT +3, время: 00:53.