2012-11-15 83 views
1

下面的代码片段的Javascript:替换DIV的所有p标签(没有任何库)

var pTags=document.getElementsByTagName('p'); 
for(i=0;i<pTags.length;i++) 
{ 
    var p=pTags[i], div=document.createElement('div'); 
    div.innerHTML='P tag replaced with a div tag'; 
    p.parentNode.replaceChild(div, p); 
} 

应该更换所有P标签与Div但它不是更换所有,但其中的一些。 red的(fiddle)没有取代。

我不需要这个,但我想知道我在这里做错了什么?所以,我的问题是为什么它不以这种方式工作。希望有人能告诉我这个事实。

感谢您的努力!

+2

可能的重复http://stackoverflow.com/questions/4606547/why-does-replacechild-behave-oddly-when-replacing-one-kind-of-element-with-ano – Garett

+0

@Garett,谢谢,但我没有看到它。 –

回答

4

getElementsByTagName返回一个活动节点列表,以便每次更换一个节点列表的变化,所以你只想要得到的第一个节点列表和替换它,直到列表为空,看http://jsfiddle.net/mowglisanu/eZNqn/4/

+0

哦!非常感谢,每天我都从So学到新东西。再次感谢您的快速和明智的答案。 –

2

的一个线方式;-)

首先,选择你想要的任何ELEM(在这种情况下,身体的所有内容)

var elem = document.getElementsByTagName('body')[0]; 
var target = elem.innerHTML; 

的 “线”

elem.innerHTML = target.replace(/(<div)/igm, '<p').replace(/<\/div>/igm, '</p>'); 

我希望有帮助。 See in action here