@khodos_dmitry

Почему запись .setAttribute('style', 'text-align:center;') неправильная?

arr1 = document.getElementsByClassName('btn-add');
	arr2 = document.getElementsByClassName('btn-del');
	
	for (var i = 0; i < arr1.length; i++) {
		arr1[i].addEventListener('click', func1);
		arr2[i].addEventListener('click', func1);
	}
	
	function func1() {
		bank_id = this.parentNode.parentNode.getElementsByClassName('select-bank')[0].value;
		id = this.dataset.id;
		del = this.dataset.del;
		el_button = this;
		console.log(id, bank_id, del);
		$.ajax({
			method: 'POST',
			url: 'cpl_offices_bank_id_by_name_ajax.php',
			data: {id: id, bank_id: bank_id, del: del}
		}).done(function () {
			el_tr = el_button.parentNode.parentNode;
			td = document.createElement('td').setAttribute('colspan', '6').setAttribute('style', 'text-align:center;');
			if (typeof del !== 'undefined'){
				td.innerHTML = "Удалено";
				el_tr.innerHTML = '';
				el_tr.appendChild(td);
			}
			else {
				td.innerHTML = "Добавлено";
				el_tr.innerHTML = '';
				el_tr.appendChild(td);
			}		
			setTimeout(function() {td.parentNode.outerHTML = ''}, '10000');	
			
		});
	}

В результате возникает ошибка:
Cannot read property 'setAttribute' of undefined
  • Вопрос задан
  • 506 просмотров
Решения вопроса 2
@ned4ded
Верстка, Фронтенд
td = document.createElement('td').setAttribute('colspan', '6').setAttribute('style', 'text-align:center;');


это не jquery, после вызова первого метода setAttribute не возвращается $-элемент (т.е. отсутствует имплементированый в $ method chaining ), но возвращается undefined.

вам нужно написать:
const td = document.createElement('td');
td.setAttribute('colspan', '6');
td.setAttribute('style', 'text-align:center;');
// console.log(td);
// <td colspan="6" style="text-align:center;"></td>

// ps я бы написал через сеттер 
// td.style.textAlign = 'center';
// td.colSpan = 6;
Ответ написан
Комментировать
potapchino
@potapchino
khodos_dmitry, с чего вы решили что можно чейнить метод .setAttribute()?
element.setAttribute().setAttribute().setAttribute().setAttribute()...
что бы вот так можно было писать, нужно чтобы .setAttribute() возвращал element, но этот метод ничего не возвращает, поэтому чейнинг здесь недопустим, поэтому только так:
element.setAttribute()
element.setAttribute()
element.setAttribute()
...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Всё работает
>> tr = document.createElement('tr');
>> tr.setAttribute('style', 'text-align:center;');
>> tr
<tr style="text-align:center;">
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы