使用 Javascript 动态创建 HTML 元素? [英] Dynamically creating HTML elements using Javascript?

查看:37
本文介绍了使用 Javascript 动态创建 HTML 元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想动态创建一些 HTML 元素(3 个 html 元素),然后将此 html 代码作为变量中的字符串返回.我不想将以下函数中的 HTML 代码写入某个 div,但是,我想在 var 中返回它.

function createMyElements(id1,id2,id3){//创建带有id1的锚点//创建id为2的div//用id3创建xyz//现在返回上面刚才创建的html代码}

我该怎么做?

解决方案

[Edit 2021/10] 这个答案现在 >10岁.这是一个包含多种创建和/或注入元素的方法的片段.所问问题的答案(创建一些元素并检索它们的 html 代码)可以在@代码段底部找到.

//经典的 createElement//-------------------------//使用 document.createElement 创建一个段落元素const elem = document.createElement(`p`);elem.id = `myBrandnewDiv1`;//输入一些文本elem.appendChild(document.createTextNode(`我的全新 div #1`));//附加一些 html(为了演示,最好不要使用innerHTML)elem.innerHTML += ` =>创建使用<code>document.createElement</code>`;//在#myBrandNewDiv1 中追加一个新段落const 嵌套 = elem.appendChild(document.createElement(`p`));nested.classList.add(`nested`);//添加一些文本Nested.textContent = `我嵌套了!`;//元素仍在内存中,现在添加//整个辣酱玉米饼馅到文档document.body.appendChild(elem);//插入相邻HTML//------------------//在嵌套的 div 中嵌套一个元素nested.insertAdjacentHTML(`afterbegin`,`<div id="nestedWithin#nested">该文本将出现在 <i>above</i>的文本我的父母,那是 div#nested.有人胆敢插入我使用<code>insertAdjacentHTML</code>

`);//对象.赋值//-------------//使用 Object.assign 创建一个元素并//一次性为其分配属性/htmlconst newElem = Object.assign(document.createElement(`div`),{ ID:`myBrandnewDiv2`,innerHTML:`div#myBrandnewDiv2 登录.我被<i>分配</i>使用<code>Object.assign</code>&hellip;`});document.body.appendChild(newElem);//insertAdjacentElement 结合 Object.assign//------------------------------------------------——//将上述技术与 insertAdjacentElement 结合使用newElem.insertAdjacentElement(`之前`,Object.assign(document.createElement(`span`),{ ID:`myBrandnewnested2_nested`,innerHTML:`<br>我也是!并附加我是使用 <code>insertAdjacentElement</code>` }));//创建文档片段//----------------------//使用文档片段来创建/注入 htmlconst fragment = document.createDocumentFragment();const mdnLnk = `https://developer.mozilla.org/en-US/` +`docs/Web/API/Document/createDocumentFragment`;fragment.appendChild(对象.赋值(document.createElement(`p`),{innerHTML:`来自<code>createDocumentFragment</code>的问候(参见<a href="${mdnLnk}">MDN</a>)`}));document.querySelector(`#myBrandnewDiv2`).appendChild(fragment);//创建,但不注入//------------------------const virtual = Object.assign(document.createElement(`p`),{ 内部 HTML:`<a href="#id1">id1</a><div id="id2">嗨!</div><p id="id3">嗨 2!</p>`,classList: [`xyz`], } );const prepareHtml4Reporting = html =>html.replace(/</g, `<`).replace(/ s+/g, ` `).replace(/ /g, ` `);document.body.insertAdjacentHTML(`之前`,`<h3>仅html</h3><pre>${prepareHtml4Reporting(virtual.innerHTML)}</pre>`);

body {字体:普通 12px/15px verdana、arial、sans-serif;保证金:2rem;}代码 {背景色:#eee;}.嵌套{左边距:0.7rem;最大宽度:450px;填充:5px;边框:1px 实心 #ccc;}

我在这个中使用了其中的一些方法(参见/src/DOM.js),具有在注入之前清理 html 的机制.

I want to dynamically create some HTML elements (3 html element) and then return this html code as a string in a variable. I don't want to write the HTML code in the following function to some div, but, I want to return it in a var.

function createMyElements(id1,id2,id3){

   //create anchor with id1
   //create div with id 2
   //create xyz with id3

  //now return the html code of above created just now

}

How can I do this?

解决方案

[Edit 2021/10] This answer is now > 10 years old. Here is a snippet containing several ways to create and/or inject elements. The answer for the question asked (create some element(s) and retrieve their html code) can be found @ the bottom of the snippet.

// The classic createElement
// -------------------------
// create a paragraph element using document.createElement
const elem = document.createElement(`p`);
elem.id = `myBrandnewDiv1`;

// put in some text
elem.appendChild(document.createTextNode(`My brand new div #1`));

// append some html (for demo, preferrably don't use innerHTML)
elem.innerHTML += ` =&gt; created using 
  <code>document.createElement</code>`;

// append a new paragraph within #myBrandNewDiv1
const nested = elem.appendChild(document.createElement(`p`));
nested.classList.add(`nested`);
// add some text to that
nested.textContent = `I am nested!`;
// the elements are still in memory, now add the 
// whole enchillada to the document
document.body.appendChild(elem);

// insertAdjacentHTML
// ------------------
// nest an element within the nested div
nested.insertAdjacentHTML(`afterbegin`, 
  `<div id="nestedWithin#nested">
    This text will appear <i>above</i> the text of 
    my parent, that being div#nested.
    Someone had the nerve to insert me using 
    <code>insertAdjacentHTML</code>
   </div>`);

// Object.assign
// -------------
// Use Object.assign to create an element and
// assign properties/html to it in one go
const newElem = Object.assign(
  document.createElement(`div`), 
  { id: `myBrandnewDiv2`, 
    innerHTML: `div#myBrandnewDiv2 signing in. 
      I was <i>assigned</i> using <code>Object.assign</code>&hellip;`});
document.body.appendChild(newElem);

// insertAdjacentElement combined with Object.assign
// -------------------------------------------------
// use the above technique combined with insertAdjacentElement
newElem.insertAdjacentElement(
  `beforeend`,
    Object.assign(document.createElement(`span`), 
      { id: `myBrandnewnested2_nested`, 
        innerHTML: `<br>Me too! And appended I was 
          with <code>insertAdjacentElement</code>` })
);

// createDocumentFragment
// ----------------------
// Use a document fragment to create/inject html
const fragment = document.createDocumentFragment();
const mdnLnk = `https://developer.mozilla.org/en-US/` +
    `docs/Web/API/Document/createDocumentFragment`;
fragment.appendChild(
  Object.assign(
    document.createElement(`p`), 
    {innerHTML: `Regards from <code>createDocumentFragment</code> 
    (see <a href="${mdnLnk}">MDN</a>)`})
);
document.querySelector(`#myBrandnewDiv2`).appendChild(fragment);

// Create, but don't inject
// ------------------------
const virtual = Object.assign(
      document.createElement(`p`), 
      { innerHTML: `       
        <a href="#id1">id1</a>
        <div id="id2">Hi!</div>
        <p id="id3">Hi 2!</p>`,
        classList: [`xyz`], } );

const prepareHtml4Reporting = html => 
  html.replace(/</g, `&lt;`)
    .replace(/
s+/g, `
`)
    .replace(/

/g, `
`);
    
document.body.insertAdjacentHTML(
  `beforeend`,
  `<h3>html only</h3><pre>${
     prepareHtml4Reporting(virtual.innerHTML)}</pre>`);

body {
  font: normal 12px/15px verdana, arial, sans-serif;
  margin: 2rem;
}

code {
  background-color: #eee;
}

.nested {
  margin-left: 0.7rem;
  max-width: 450px;
  padding: 5px;
  border: 1px solid #ccc;
}

I have used some of these methods in this library (see /src/DOM.js), with a mechanism for sanitizing html before it is injecting.

这篇关于使用 Javascript 动态创建 HTML 元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆