Задать вопрос
@Nerubik

Как изменить элемент в пользовательском компоненте?

Только начал изучать пользовательские компоненты и shadow DOM. Появилась такая проблема, что я создаю лисенер к Test и без проблем получаю значения из внешних элементов (в данном случае из select), но никак не могу понять как записать их в теневые.

class MyElement extends HTMLElement {
			constructor() {
				super();
			}

			render() {
				let html = document.importNode(myWebCompTemplate.content, true);
				let Test = document.querySelector("#typeId")
				this.attachShadow({ mode: 'open' })
				this.shadowRoot.appendChild(html);
				let colorNew = {
					name: this.getAttribute('name') || undefined,
					type: this.getAttribute('type') || undefined,
					color: this.getAttribute('color') || undefined
				}
				this.shadowRoot.querySelector('.name').textContent = this.getAttribute('name')
				this.shadowRoot.querySelector('.type').textContent = this.getAttribute('type')
				this.shadowRoot.querySelector('.color').textContent = this.getAttribute('color')
				Test.addEventListener("click", function (e) {
					console.log(Test.value)
				})
			}

			connectedCallback() {
				if (!this.rendered) {
					this.render();
					this.rendered = true;
				}
			}

			disconnectedCallback() {

			}

			static get observedAttributes() {
				return ['name', 'type', 'color'];
			}

			attributeChangedCallback(name, oldValue, newValue) {
				this.render()
			}
		}
		customElements.define("my-webcomp", MyElement);


<template id="myWebCompTemplate">
		<p class="name"></p>
		<p id='type'
			class="type"></p>
		<p class="color"></p>
	</template>
	<my-webcomp name="Серый хомяк"
		type="main"
		color="#3f3f3f"
		id="myWebComp">
	</my-webcomp>
  • Вопрос задан
  • 44 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 11:57
500 руб./в час
18 дек. 2024, в 11:54
2000 руб./за проект