使用javascript更改未附加元素的html标签类型

时间:2019-01-22 14:27:38

标签: javascript html dom

所以我有一个由另一个进程创建的元素,该元素是通过类似于

的方法创建的
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)

1 个答案:

答案 0 :(得分:1)

请检查此选项是否具有跨浏览器的兼容性,但是元素上可能有一些有用的属性和方法。特别是Element.attributesElement.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); 

您需要考虑某些属性,例如innerHTMLinnerTexttextContent,如果设置了倍数,它们会相互覆盖。您可能还需要考虑childNodes而不是其他原因。