我有一个表示元素的 HTML 字符串:.我想将其附加到 DOM 中的一个元素(在我的情况下为 a)。如何使用原型或 DOM 方法执行此操作?'<li>text</li>'
ul
(我知道我可以在jQuery中轻松做到这一点,但不幸的是我们没有使用jQuery。
注意:大多数当前浏览器都支持 HTML 元素,这提供了一种更可靠的方法来从字符串创建元素。有关详细信息,请参阅下面的马克·阿默里的回答。<template>
对于较旧的浏览器和 node/jsdom:(在撰写本文时尚不支持元素),请使用以下方法。这与库用来从 HTML 字符串中获取 DOM 元素所做的相同(IE 需要一些额外的工作来解决其实现的错误):<template>
innerHTML
function createElementFromHTML(htmlString) {
var div = document.createElement('div');
div.innerHTML = htmlString.trim();
// Change this to div.childNodes to support multiple top-level nodes.
return div.firstChild;
}
请注意,与 HTML 模板不同,这不适用于某些在法律上不能是 的子元素,例如 s。<div>
<td>
如果你已经在使用库,我建议你坚持使用库认可的从HTML字符串创建元素的方法:
update()
jQuery(html)
jQuery.parseHTML
HTML 5引入了可用于此目的的元素(如WhatWG规范和MDN文档中的描述)。<template>
元素用于声明可在脚本中使用的 HTML 片段。该元素在 DOM 中表示为 具有类型属性的 ,以提供对模板内容的访问。这意味着您可以通过设置 的 元素,然后进入 的 属性,将 HTML 字符串转换为 DOM 元素。<template>
HTMLTemplateElement
.content
DocumentFragment
innerHTML
<template>
template
.content
例子:
/**
* @param {String} HTML representing a single element
* @return {Element}
*/
function htmlToElement(html) {
var template = document.createElement('template');
html = html.trim(); // Never return a text node of whitespace as the result
template.innerHTML = html;
return template.content.firstChild;
}
var td = htmlToElement('<td>foo</td>'),
div = htmlToElement('<div><span>nested</span> <span>stuff</span></div>');
/**
* @param {String} HTML representing any number of sibling elements
* @return {NodeList}
*/
function htmlToElements(html) {
var template = document.createElement('template');
template.innerHTML = html;
return template.content.childNodes;
}
var rows = htmlToElements('<tr><td>foo</td></tr><tr><td>bar</td></tr>');
请注意,使用不同容器元素(如 )的类似方法不太有效。HTML 对允许哪些元素类型存在于哪些其他元素类型中具有限制;例如,不能将 A 作为 的直接子级。这会导致这些元素消失,如果您尝试设置 of a 以包含它们。由于 s 对其内容没有此类限制,因此在使用模板时不适用此缺点。div
td
div
innerHTML
div
<template>
但是,在某些旧浏览器中不受支持。截至 2021 年 96 月,我可以使用… 估计全球 <>% 的用户正在使用支持 s 的浏览器。特别是,没有版本的 Internet Explorer 支持它们;微软直到Edge发布才实现支持。template
template
template
如果您有幸编写的代码仅针对现代浏览器的用户,请立即使用它们。否则,您可能需要等待一段时间才能让用户赶上。
使用 insertAdjacentHTML()。它适用于所有当前的浏览器,甚至适用于 IE11。
var mylist = document.getElementById('mylist');
mylist.insertAdjacentHTML('beforeend', '<li>third</li>');
<ul id="mylist">
<li>first</li>
<li>second</li>
</ul>
模板简介:该模板名称为【JavaScript 使用内置的 DOM 方法或 Prototype 从 HTML 字符串创建新的 DOM 元素】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。