이 "데이터 모델 가져오기" 버튼을 사용하여 모든 텍스트+선택 옵션을 가져오려고 합니다. </p><p>내 코드는 다음과 같습니다.</p><p><br /></p> <pre class="brush:php;toolbar:false;"><템플릿> <div> <div class="content-editable" contenteditable="true" @input="onInput" ref="contentEditable"></div> <button @click="addDropdown">드롭다운 추가</button> <button @click="getDataModel">데이터 모델 가져오기</button> <div>{{ 데이터모델 }}</div> </div> </템플릿> <스크립트> 기본값 내보내기 { 데이터() { 반품 { 콘텐츠: '', 드롭다운: [], dropdownOptions: ['옵션 1', '옵션 2', '옵션 3'], 데이터모델: '', }; }, 방법: { onInput(이벤트) { this.content = event.target.innerHTML.replace(/<div><br></div>/g, ''); }, addDropdown() { const 드롭다운 = { selectedOption: this.dropdownOptions[0], }; this.dropdowns.push(dropdown); const editableDiv = this.$refs.contentEditable; const dropdownSelect = document.createElement('select'); dropdownSelect.style.width = '100px'; this.dropdownOptions.forEach((옵션) => { const dropdownOption = document.createElement('option'); dropdownOption.value = 옵션; dropdownOption.text = 옵션; dropdownSelect.appendChild(dropdownOption); }); editableDiv.appendChild(dropdownSelect); }, getDataModel() { const editableDiv = this.$refs.contentEditable; const clonedDiv = editableDiv.cloneNode(true); const selectElements = clonedDiv.querySelectorAll('select'); this.dropdowns.forEach((dropdown, index) => { const selectedOption = dropdown.selectedOption; const selectedOptionText = Array.from(selectElements[index].options).find((옵션) => option.value === selectedOption)?.text; const selectedOptionTextNode = document.createTextNode(` ${selectedOptionText}`); selectElements[index].replaceWith(selectedOptionTextNode); }); this.dataModel = clonedDiv.textContent; }, }, }; </스크립트> <스타일 범위> .내용 편집 가능 { 테두리: 1px 실선 #ccc; 패딩: 10px; 최소 높이: 100px; 여백 하단: 10px; } <p><br /></p>
Vue.js는 데이터 기반이며 MVVM 사고를 채택합니다. 여러 개의 "입력" 태그를 생성하려는 경우 DOM을 동적으로 생성하는 대신 v-for를 사용하는 것이 더 합리적입니다.
으아아아도움이 되기를 바랍니다!