javascript 使用模板字符串附加HTML

vs3odd8k  于 2022-12-28  发布在  Java
关注(0)|答案(3)|浏览(419)

es6的新特性是,有没有一种方法可以在DOM中使用模板文字''来附加HTML,而不会覆盖当前发布的内容?
我有一个巨大的HTML块,我需要为正在创建的列表发布。在那里用户可以发布他们的输入。
每次提交任务时,它会覆盖当前提交的任务。我需要它附加在下面。
拉小提琴作示范。
https://jsfiddle.net/uw1o5hyr/5/

<div class = main-content> 

 <form class ='new-items-create'>

 <label>Name:</label><input placeholder=" A Name" id="name">

 <button class = "subBtn">Submit</button>

 </form>

 </div>

  <span class="new-name"></span>

JavaScript

form.addEventListener('submit',addItem);

 function addItem(event){
 event.preventDefault();
 let htmlStuff = 
    ` 
     <div class="main">
    <div class="a name">
     <span>${name.value}</span>
    </div>
    <div>
    `

   itemCreated.innerHTML = htmlStuff;

   }
fae0ux8s

fae0ux8s1#

insertAdjacentHTML()在4个位置添加htmlString,请参见演示。与.innerHTML不同,它不会重新呈现和破坏原始HTML和引用。.innerHTML唯一做的insertAdjacentHTML()不能做的事情是读取HTML。注意:即使使用+=运算符,.innerHTML的赋值也总是破坏所有内容。请参阅此post

const sec = document.querySelector('section');

sec.insertAdjacentHTML('beforebegin', `<div class='front-element'>Front of Element</div>`)

sec.insertAdjacentHTML('afterbegin', `<div class='before-content'>Before Content</div>`)

sec.insertAdjacentHTML('beforeend', `<div class='after-content'>After Content</div>`)

sec.insertAdjacentHTML('afterend', `<div class='behind-element'>Behind Element</div>`)
* {
  outline: 1px solid #000;
}

section {
  margin: 20px;
  font-size: 1.5rem;
  text-align: center;
}

div {
  outline-width: 3px;
  outline-style: dashed;
  height: 50px;
  font-size: 1rem;
  text-align: center;
}

.front-element {
  outline-color: gold;
}

.before-content {
  outline-color: blue;
}

.after-content {
  outline-color: green;
}

.behind-element {
  outline-color: red;
}
<section>CONTENT OF SECTION</section>
9jyewag0

9jyewag02#

您可以只使用+=来附加:

document.getElementById('div').innerHTML += 'World';
<div id="div">
  Hello
</div>
44u64gxh

44u64gxh3#

Element.prototype.appendTemplate = function (html) {
    this.insertAdjacentHTML('beforeend', html);
    return this.lastChild;
};

如果您按照上面的步骤创建了元素原型,您可以将元素作为引用重新获取,以便您可以继续修改它:

for (var sectionData of data) {
        var section = target.appendTemplate(`<div><h2>${sectionData.hdr}</h2></div>`);

        for (var query of sectionData.qs) {
            section.appendTemplate(`<div>${query.q}</div>`);
        }
    }

根据您的工作量,也许使用模板引擎会更好,但这可以让您在没有重量的情况下走得很远。

相关问题