'jQuery prepend() stringifies argument

I have the following code:

sections=$("section");
for(let i=0; i<sections.length; i++){
    let sectionTempCode=("<button id='").concat(i.toString()).concat("'>Toggle section view</button>");
    console.log(sectionTempCode)
    sections[i].prepend(sectionTempCode)
}

The intention is to add button tags to the HTML and display a button in the beginning of each . Instead, what I get is the code for the tag inside double quotes, which results in the code itself being displayed in my page:

"<button id='0'>Toggle section view</button>"


Solution 1:[1]

Use .each() and the Elements generator $(HTMLTag, {...properties})

$("section").each((i, el) => {

  $("<button>", {
    prependTo: el,
    id: i+1,
    type: "button",
    text: "Toggle section view",
    click() {
      console.log(this.id);
    }
  });

});
<section></section>
<section></section>
<section></section>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1