Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Чтобы менялся цвет у той ячейки, на которую кликнули (а у остальных удалялся) (https://javascript.ru/forum/misc/79091-chtoby-menyalsya-cvet-u-tojj-yachejjki-na-kotoruyu-kliknuli-u-ostalnykh-udalyalsya.html)

yaparoff 16.12.2019 11:39

Чтобы менялся цвет у той ячейки, на которую кликнули (а у остальных удалялся)
 
При клике на ячейку у нее меняется цвет (добавляется класс).
Как сделать чтобы цвета у других ячеек исчезали (если они есть), а цвет менялся только у той ячейки, на которую кликнули?

https://codepen.io/yaparoff/pen/MWYbWMV

ksa 16.12.2019 12:34

Цитата:

Сообщение от yaparoff
Как сделать чтобы цвета у других ячеек исчезали (если они есть), а цвет менялся только у той ячейки, на которую кликнули?

Как вариант...
<style type='text/css'>
.cell {
  width: 80px;
  height: 60px;
  border: 1px solid #000;
  cursor: pointer;
}
.row {
  display: flex;
}
.on {
  background-color: red;
}
</style>
<div class="row">
	<div class="cell" data-sort='0'></div>
	<div class="cell" data-sort='0'></div>
	<div class="cell" data-sort='0'></div>
</div>
<script type='text/javascript'>
var o=document.getElementsByClassName('row');
o[0].addEventListener('click',function(e){
	var oc=e.target.classList;
	if (oc.contains('cell')) {
		var el=e.target.parentNode.querySelectorAll('.cell.on')
		for (var i=0; i<el.length; i++) {
			el[i].classList.remove('on');
		};
		oc.add('on');
	};
});
</script>

laimas 16.12.2019 13:22

ksa, чтобы не перебирать постоянно ячейки, коих может быть много, можно делегировать обработку родителю, в который записывать объект активный, при щелчке по другому объекту у сохраненного удаляется класс.

ksa 16.12.2019 14:02

Цитата:

Сообщение от laimas
чтобы не перебирать постоянно ячейки, коих может быть много, можно

Я "перебираю" только нужные мне. Ничего лишнего. :D

рони 16.12.2019 14:45

делегирование зависимые клики
 
yaparoff,
на основе варианта от Malleys
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
.cell {
  width: 80px;
  height: 60px;
  border: 1px solid #000;
  cursor: pointer;
  background-color: var(--bg-color, '')
}

.row {
  display: flex;
  margin: 20px auto;
}

  </style>
  <script>
const classNames = ['', 'yellow', 'red'];
document.addEventListener("click", event => {
    const cell = event.target.closest(".row > .cell");
    if(cell) {
        const root = cell.parentNode;
        if(root._lastCell) root._lastCell.style.setProperty('--bg-color', '');
        if(root._lastCell != cell) root._current = 0;
        root._current = (root._current + 1) % classNames.length;
        root._lastCell = cell;
        root._lastCell.style.setProperty('--bg-color', classNames[root._current])
    }
});

  </script>
</head>
<body>
<div class="row">
  <div class="cell"></div>
  <div class="cell"></div>
  <div class="cell"></div>
</div>
<div class="row">
  <div class="cell"></div>
  <div class="cell"></div>
  <div class="cell"></div>
</div>
</body>
</html>

yaparoff 17.12.2019 14:42

В общем ни одно из решений не подошло. Написал сам то что мне нужно.
https://codepen.io/yaparoff/pen/MWYbWMV
Всем спасибо!

ksa 17.12.2019 14:44

yaparoff, я тебе пример показал, а не решение... :D

рони 17.12.2019 14:46

yaparoff,
посмотрите пост #5 снова.


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