gpt4 book ai didi

javascript - 使用 Javascript 动态创建 HTML 元素?

转载 作者:太空狗 更新时间:2023-10-29 13:37:25 25 4
gpt4 key购买 nike

我想动态创建一些 HTML 元素(3 个 html 元素),然后将此 html 代码作为变量中的字符串返回。我不想将以下函数中的 HTML 代码写入某个 div,但是,我想在 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

}

我该怎么做?

最佳答案

[编辑 2021/10] 这个答案现在已有 10 年以上了。这是一个片段,其中包含几种创建和/或注入(inject)元素的方法。问题的答案(创建一些元素并检索它们的 html 代码)可以在代码片段的底部找到。

// 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 += ` => 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(/\n\s+/g, `\n`)
.replace(/\n\n/g, `\n`);

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;
}

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

关于javascript - 使用 Javascript 动态创建 HTML 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5536596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com