代码之家  ›  专栏  ›  技术社区  ›  lilHar

用javascript更改未经审核的元素的HTML标记类型

  •  1
  • lilHar  · 技术社区  · 6 年前

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

    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)

    1 回复  |  直到 6 年前
        1
  •  1
  •   wlh    6 年前

    请检查此项以了解跨浏览器的兼容性,但元素上可能有可用的属性和方法。尤其, 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 什么不是。