Как по клику на <i> добавить значение в div?

210
22 июня 2017, 06:53

Есть такая HTML структура:

<div class="pol"></div>
<div class="change">
    <i>1</i>
    <i>2</i>
    <i>3</i>
    <i>4</i>
    <i>5</i>
    <i>6</i>
    <i>7</i>
    <i>8</i>
    <i>9</i>
</div>

Таких структур у меня 80 штук. Необходимо чтобы по клику на число оно добавлялось в .pol.

Как это сделать?

Answer 1

Для этого можно добавить обработчик события click каждому <i>, в котором в качестве текста в .pol устанавливать соответствующее число:

var pol = document.querySelector(".pol"); 
document.querySelectorAll(".change i").forEach(function(element) { 
  element.addEventListener("click", function() { 
    pol.textContent = element.textContent; 
  }); 
});
<div class="pol"></div> 
<div class="change"> 
  <i>1</i> 
  <i>2</i> 
  <i>3</i> 
  <i>4</i> 
  <i>5</i> 
  <i>6</i> 
  <i>7</i> 
  <i>8</i> 
  <i>9</i> 
</div>

Если нужно не заменять текст в .pol, а добавлять число в конец текста, то достаточно использовать pol.textContent += вместо pol.textContent =.

Так как в вопросе отсутствует метка jQuery, то и в решении jQuery не используется.

Answer 2

document.querySelector(".change").addEventListener('click', function(e) { 
  if (e.target.tagName === 'I') { 
    document.querySelector(".pol").textContent += e.target.textContent 
  } 
})
.pol:empty:before { content: "\A0" }
<div class="pol"></div> 
 
<div class="change"> 
  <i>1</i> 
  <i>2</i> 
  <i>3</i> 
  <i>4</i> 
  <i>5</i> 
  <i>6</i> 
  <i>7</i> 
  <i>8</i> 
  <i>9</i> 
</div>

Answer 3

Будет тоже полезным...

;(function(){ 
	var polElems = document.getElementsByClassName('pol'); 
	var changeElems = document.querySelectorAll('.change > i'); 
	Array.prototype.forEach.call(changeElems, function(item) { 
		item.addEventListener('click', function(){ 
			var self = this; 
			Array.prototype.forEach.call(polElems, function(pol){ 
				var newItem = self.cloneNode(true); 
				// Может пригодится 
				newItem.addEventListener('click', function(){ 
					this.remove(); 
				}); 
				pol.appendChild(newItem); 
			}); 
		}); 
	});	 
})();
<div class="pol"></div> 
<div class="change"> 
<i>1</i> 
<i>2</i> 
<i>3</i> 
<i>4</i> 
<i>5</i> 
<i>6</i> 
<i>7</i> 
<i>8</i> 
<i>9</i> 
</div> 
<!-- для примера  -->  
<div class="pol"></div> 
<div class="pol"></div>

Answer 4

Если вам нужно чтобы просто добавлялось как тест, тогда вот самый простой вариант как по мне:

$('.change').on('click', 'i', function() { 
	$('.pol').append($(this).text()); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="pol"></div> 
<div class="change"> 
<i>1</i> 
<i>2</i> 
<i>3</i> 
<i>4</i> 
<i>5</i> 
<i>6</i> 
<i>7</i> 
<i>8</i> 
<i>9</i> 
</div>

READ ALSO
Живая строка JS jQuery

Живая строка JS jQuery

Всем привет, очень нужна помощьСоздавая новый тестовый блок в меню методом

301
Не работает плагин copy-webpack-plugin при сборке

Не работает плагин copy-webpack-plugin при сборке

Решил на новом компьютер склонировать проект, который правильно собирался на старомМетодом проб и ошибок определил, что не срабатывает copy-webpack-plugin...

309
javascript создание нового массива

javascript создание нового массива

У меня есть массив чисел [65, 44, 12, 4], Мне надо получить новый массив в котором будет сложение цифр каждого элемента массива

178