2010-07-13 69 views
1

我做这样的事情:JavaScript的替代

<p>SQL</p> 
<p>sql</p> 
<p>sQl</p> 
<p>SqL</p> 
<script type="text/javascript"> 
var ps = document.getElementsByTagName('p'); 

for(var i = 0; i < ps.length; i++) { 
var p = ps[i]; 
p.childNodes[0].nodeValue.replace(/sql/gi, 'VB.NET'); 
p = null; 
} 
</script> 

但它不替换文本。怎么了? 谢谢。

+0

这是工作,但你是不是值设置到任何东西。 – BrunoLM 2010-07-13 14:10:15

回答

4

替换为而不是一种增变器方法。

el.nodeValue = el.nodeValue.replace(/regex/,'something'); 

使用它像这样...

remember to google.. surprise!

+0

好的,谢谢! 问题解决了! – thomas 2010-07-13 14:12:25

+0

@thomas:嘿,你的问题已经在Google上用meder的搜索条件排名第四;-) – Boldewyn 2010-07-13 14:35:46

0

尝试

p.childNodes[0].nodeValue = p.childNodes[0].nodeValue.replace(/sql/gi, 'VB.NET'); 

p.innerHTML = p.innerHTML.replace(/sql/gi, 'VB.NET'); 
+0

注意使用innerHTML,因为它仍然不是dom的正式组成部分(尽管它应该)。 – gnome 2010-07-13 14:33:17

0

你没有指定更换回p元素。

还记得alert是你的朋友。看看p.childNodes[0].nodeValue中有什么。

0

试试这个 p.childNodes [0] .nodeValue = p.childNodes [0] .nodeValue.replace(/ sql/gi,'VB.NET');

0

我相信替换,在这里,只是返回值(这是一段时间)。

你试过:

p.childNodes[0].nodeValue = p.childNodes[0].nodeValue.replace(/sql/gi, 'VB.NET'); 
0

我会拉他们赶出在文件头的功能,然后调用结束标记之前的方法。这将确保在JS面前的文件记录执行:

// head 
<script type='text/javasript'> 
function changeText() { 
var ps = document.getElementsByTagName('p'); 
for(var i = 0; i<ps.length; i++) { 
var node = ps[i].childNodes[0].nodeValue.toLowerCase(); 
node = node.replace('sql', 'VB.NET'); 
ps[i].childeNodes[0].nodeValue = node; 
} 
} 
</script> 
// Before the closing body tag 
<script type='text/javascript'>changeText();</script> 

你也可以使用jQuery,这里有一个查找/替换的方法,Find & replace jquery