2010-10-23 150 views
7

假设我想将所有<img>标记更改为页面上的标记。 JavaScript可以用于这个目的吗?使用Javascript更改标记的类型

有什么方法可以改变实际的标签类型,或者我必须先删除<img>然后再创建,如果是的话,我怎样才能确保新标签与旧标签具有相同的容器等?

什么是最直接的和浏览器友好的方式来执行这种替代?

回答

4

虽然使用库等jQuery更方便,可以用这样的无库(更换元件,不改变的类型)做到这一点:

实施例:http://jsfiddle.net/BvSvb/

var imgs = document.getElementsByTagName('img'); 

var i = imgs.length; 
var parent; 
var iframe = document.createElement('iframe'); 
var currFrame; 

while(i--) { 
    currFrame = iframe.cloneNode(false); 
    currFrame.setAttribute('src', imgs[ i ].getAttribute('src')); 
    parent = imgs[ i ].parentNode; 
    parent.insertBefore(currFrame, imgs[ i ]); 
    parent.removeChild(imgs[ i ]); 
} 
0

您不能更改标签的类型,您只能用不同的标签替换它们。

您可以通过设置newElement.innerHTML = oldElement.innerHTML复制内容。

+1

请注意,尽管'innerHTML'得到了广泛的支持,但它目前不是任何W3C标准的一部分。如果你想产生一个最大可移植的实现,应该避免使用“innerHTML”。 – Tim 2010-10-23 17:48:52

1

无法更改tagName。
您可以创建一个新元素,并将旧元素的属性分配给新元素,将childNodes移动到新元素中,并用新元素替换旧元素。

3

使用标准接口,只有在创建元素时才能设置DOM元素的类型。您可以在一个标准的方式合理地达到最接近的将是:

  • 创建所需类型
  • 副本从旧元素的每个属性到新
  • 移动的每一个孩子的新元素旧元素成为新一个
  • 一个孩子如果要做到这一点,需要帮助这样做用新

替换DOM树中的老元素,不要再问。

1

您不能更改html标记名称的类型,但可以替换它们。一个简单的方法就是用jQuerys replacewith函数。