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

标签 javascript html dom

所以我有一个由另一个进程创建的元素,创建方法类似于

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.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 等等。

关于javascript - 使用 javascript 更改未添加元素的 html 标签类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54310430/

相关文章:

javascript - DOM 对象中的继承和原型(prototype)链

javascript - 查找正在更改 DOM 元素的 javascript

javascript - jQuery - 更改具有相同类名的特定文本的字体粗细

javascript - 两个 Div 彼此相邻,其中 ID 包含图像

javascript - If 语句更改添加的新行添加的数量

jquery - 如何固定宽度,同时使其看起来像是从屏幕外滑入的?

javascript - 私有(private)成员可以在 Angular 2 装饰器中访问

javascript - 如何在单页应用程序中使用窗口onload?

javascript - 为什么仅仅为了实现跨浏览器兼容就需要付出很多努力?

javascript - 可以附加很多事件监听器吗?