所以我有一个由另一个进程创建的元素,该元素是通过类似于
的方法创建的var their_element = document.createElement("div");
/* Lots of stuff is done to their_element */
那个对象稍后会传递给我。它尚未被附加到任何地方。问题是,当它最终到达html时,我需要它是不同的html标签类型,例如:
<form></form>
我该如何更改?我发现的解决方案是在添加之后而不是之前进行编辑。
编辑: 此外,无法为此分配学习到的nodeName。
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)
答案 0 :(得分:1)
请检查此选项是否具有跨浏览器的兼容性,但是元素上可能有一些有用的属性和方法。特别是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
而不是其他原因。