所以我有一个由另一个进程创建的元素,创建方法类似于
var their_element = document.createElement("div");
/* Lots of stuff is done to their_element */
然后那个对象被传递给我。它还没有被附加到任何地方。问题是,当它最终命中 html 时,我需要它是不同的 html 标记类型,例如:
<form></form>
我该如何改变它?我找到的解决方案涉及在附加之后而不是之前进行编辑。
编辑: 此外,无法为此分配已学习的节点名称。
their_element.nodeName = "FORM"
不起作用。
此外,这也不起作用:
their_element.tagName = "FORM"
这也不起作用:
var outside = their_element.outerHTML;
outside = outside.replace(/div/g, 'form');
their_element.outerHTML = outside;
所有这些在追加时仍将其保留为 DIV。 (而且我不是在寻找 jQuery)
最佳答案
检查跨浏览器兼容性,但元素的属性和方法可能有用。特别是 Element.attributes
、Element.hasAttributes()
和 Element.setAttribute()
。请参阅:https://developer.mozilla.org/en-US/docs/Web/API/Element/attributes
我不会在这里使用 ES6,所以我们不必担心转译。如果需要,您可以更新:
var el = document.createElement('div');
el.id="random";
el.style.background="red";
el.style.width="200px";
el.style.padding="10px";
el.style.margin="10px";
el.innerHTML="<input type='submit' value='submit'>";
console.log({"Element 1": el});
var newEl = document.createElement('form');
console.log({"Element 2 Before Transformation": newEl})
if (el.hasAttributes()) {
var attr = el.attributes
for (var i = 0; i < attr.length; i++) {
var name = attr[i].name, val = attr[i].value;
newEl.setAttribute(name, val)
}
}
if (el.innerHTML) { newEl.innerHTML = el.innerHTML }
console.log({"Element 2 After Transformation": newEl})
document.body.append(el);
document.body.append(newEl);
您需要考虑某些属性,如 innerHTML
、innerText
和 textContent
,如果设置了倍数,它们会相互覆盖。您可能还需要考虑 childNodes
等等。
关于javascript - 使用 javascript 更改未添加元素的 html 标签类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54310430/