Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Всплытие и перехват события (https://javascript.ru/forum/events/75819-vsplytie-i-perekhvat-sobytiya.html)

Nlk 09.11.2018 10:46

Всплытие и перехват события
 
Здравствуйте!

Скажите пожалуйста, как данную конструкцию можно переписать, как на проверку содержания определенного класса а не тэга?
Спасибо

/* нужно
if (event.target.classList.contains('class')) {
*/

table.onclick = function(event) {
  var target = event.target;
  while (target != table) {
    if (target.tagName == 'TD') {
      highlight(target);
      return;
    }
  }
}

j0hnik 09.11.2018 10:55

table.onclick = function(event) {
  var target = event.target;
  while (target != table) {
    if (target.classList.contains('class')) {
      highlight(target);
      return;
    }
  }
};

что сложного?

Nlk 09.11.2018 11:25

j0hnik,
Супер, спасибо большое

рони 09.11.2018 13:44

:-? а почему цикл не бесконечный?

j0hnik 09.11.2018 13:45

Цитата:

Сообщение от рони
а почему цикл не бесконечный?

видимо highlight(target);

рони 09.11.2018 13:47

Цитата:

Сообщение от j0hnik
видимо highlight(target);

???

рони 09.11.2018 13:50

:write: либо цикл не нужен, либо нужно добавить target = target.parentNode

j0hnik 09.11.2018 14:24

<div id="table">
	<div class="cl xxx">
		<div class="cl">нажми</div>
	</div>
</div>

	<script>

function highlight(el){
el.parentNode.click();
}

table.onclick = function(event) {
  var target = event.target;
  console.log(target);
  while (target != table){
    if (target.classList.contains('cl')) {
      highlight(target);
      return;
    }
  }
};
</script>


это конечно полная хрень, но highlight может обойти до table

Dilettante_Pro 09.11.2018 14:29

Цитата:

Сообщение от рони
а почему цикл не бесконечный?

Проблема, наверное, в том что он бесконечный
Без цикла
<table class="class">
   <tr>
        <td>0</td><td class="class">1</td><td>0</td><td class="class">2</td>
   </tr>
   <tr>
        <td>0</td><td class="class">3</td><td>0</td><td class="class">4</td>
   </tr>
</table>
<script>
function highlight(item) {
   item.style.backgroundColor = "lightgreen";
}
var table = document.querySelector('table');
table.onclick = function(event) {
  var target = event.target;
  if (target != table && target.classList.contains('class')) {
      highlight(target);
  }
};
</script>

Проверка target != table имеет смысл только если и у table есть class="class"

рони 09.11.2018 14:37

Dilettante_Pro,
цикл с
Цитата:

Сообщение от рони
target = target.parentNode

надёжнее
<td class="class"><span>00000000000000</span></td>


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