Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Получение номера класса, по которому произведен клик (https://javascript.ru/forum/dom-window/70947-poluchenie-nomera-klassa-po-kotoromu-proizveden-klik.html)

Illibes 14.10.2017 15:03

Получение номера класса, по которому произведен клик
 
Добрый день, уважаемые форумчани. Заранее прошу не кидать в меня камнями. Перед мною встала задача, которую можно было бы решить намного проще используя "GetElementById", но все таки я хочу реализовать задумку именно так.
Суть в том, что есть меню опций, с одинаковыми цсс классами. По клике на каждый из них рядом с ним должна появится галочка - (отмечено, мол), по еще одному клику - галочка должна снятся. С добавлением галчоки (в моем случае img) особых пробелм не возникло, а вот с удалением - нужна ваша помощь.
Собственно, вот мой быдло-код:
<script>
           $(document).ready(function()
            { 
            	$(".round-img").click(function()
            	{
                   var clicked = document.getElementsByClassName('setting-row');
                   for (var i = 0; i < clicked.length; i++)
                   	{
	                	clicked[i].addEventListener("click", adding);
	                	
	                	function adding(){ 
	                		{
	                    		var o=document.createElement('img');
	                    	  	o.src='img/system/yes.png';
	               				o.className="yes-marker";
                        		this.appendChild(o);
                        		 /*console.log($(this));*/
                        		
                 			}
                 		

	                     	 if (this.appendChild(o))
                        		{
	                            		clicked[i].addEventListener("click", del)
	                            			function del()
	                            			{
	                            			this.removeChild(o);

                        				}
                        			};
                        			}
               						
                        	}
					})
					}) 
            
              

        </script>

рони 14.10.2017 16:55

Illibes,
минимальный html и css сделайте, и лучше не назначать клик в клике, если нет цели исчерпать ресурсы.

Illibes 14.10.2017 17:08

дело в том, что css и html мне как раз аткки править не желательно. Но свою ошибку я уже, кажется, нашел.. итый элемент все арвно попросту доходил до конца и был равен десяти.
Решение, которое более лаконично и как по мне правильно, не до конца у меня работает, но это вопрос времени:
(function () {
    var divs = document.querySelectorAll(".setting-row");
    var handler = function() {
        var index = Array.prototype.indexOf.call(divs, this);
        var o=document.createElement('img');
	o.src='img/system/yes.png';
	o.className="yes-marker";
    document.getElementsByClassName('setting-row')[index].appendChild(o);
       
    }
    
    for (var i = 0; i < divs.length; i++) {
        divs[i].onclick = handler;
 }());

рони 14.10.2017 17:26

Illibes,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .setting-row{
      border: 1px dashed Gray; padding: 5px; height: 100px; width: 100px ;
      background-color: rgba(139, 69, 19, 1);
  }

  </style>

  <script>

 window.addEventListener('DOMContentLoaded', function() {
  var o=document.createElement('img');
  o.src='http://superadm.net/uploads/icons/camera_test.png';
  o.classList.add("yes-marker");  
  var divs = document.querySelectorAll(".setting-row");
  [].forEach.call(divs, function(item) {
          item.addEventListener('click', function() {
              var img = item.querySelector('.yes-marker');
              if (img)  item.removeChild(img);
              else item.appendChild(o.cloneNode())
          });
      });

  });

  </script>
</head>

<body>
<div class="setting-row"></div>
<div class="setting-row"></div>
<div class="setting-row"></div>
</body>
</html>

рони 14.10.2017 17:45

Illibes,
пост №4 запустите код и кликайте по блокам

Illibes 15.10.2017 13:45

Вы просто лучший


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