2011-12-02 80 views
1

我知道,这个正则表达式替换:something.replace(/something/g,"something");替换字符串每次出现,但我怎么用一个jQuery/JavaScript表达式替换所有的东西,因为这样的事情:javascript全部替换为javascript表达式?

newhtml=newhtml.replace(wrap($('<span class="charachter">' + prop + '</span>'))/g, wrap($('<span class="charachter">' + prop + '</span>'), obj[prop])); 

没有当它是工作变成这样的事情:

newhtml=newhtml.replace(/wrap($('<span class="charachter">' + prop + '</span>'))/g, wrap($('<span class="charachter">' + prop + '</span>'), obj[prop])); 

我该怎么办?

+0

的.replace()函数适用于字符串。你想要替换什么?你有什么看起来在替换的两个部分相同 –

+0

我真的不知道你在那里试图做什么。 –

回答

2

正则表达式仅适用于字符串。现在发生的事情是,它会将通常选择节点的文本转换为字符串,并试图匹配那些不匹配的字符,因此它什么都不会做。

如果要替换节点,则需要修改节点属性或删除节点并在同一位置添加新节点。

注意,您可以使用jQuery replaceWith方法(也可以使用克隆方法,具体取决于您想要执行的操作)为1节点提供您尝试替换的所有节点属性。

$('#node1').replaceWith($('#node2')); //Replace node1 with node2 
$('#node1').replaceWith($('#node2').clone()); // Replace node1 with a copy of node2 
+0

您可能还想使用replaceWith()将元素替换为新元素。 –

+0

查看更新:) – jyore

+0

我试图用html代替一个字符串,而不是一个实际的节点。希望你明白我的意思 –

0

我知道其他海报的回答可能是更紧密地与你所需要的排列,但如果你想做的事与他们看中的变量正则表达式,你需要用正则表达式构造。

var text = "old stuff" 
var stuff = "lots of old stuff" 
var newStuff = stuff.replace(new RegExp(text, 'g'), "new stuff") // lots of new stuff 

上取代更多的文档: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace

至于你也许你会想要做这样的事情:

var $span = $("<span class='rarar'>bla bla bla</span>") // create the new element 
var html = $span.text() // bla bla bla 
var text = html.replace(new RegExp("bla", "g"), "go") 
$span.text(text) // <span class='rarar'>go go go</span> 
$span.appendTo(document.body) // add it to the body