2013-02-13 25 views
0

我想要使用jQuery/Javascript来解析HTML内容。我想查找方括号内的单词并更改整个单词的链接。替换网页上的链接的方形括号

例子:

<div> 
    This is text inside a div. It has a reference to an [[Article]] 
</div> 

我试图用正则表达式来改变什么是双括号内弄成这个样子:

<div> 
    This is text inside a div. It has a reference to an <a href='/dictionary#Article'>Article</a> 
</div> 

我能找到的方括号之间字的所有实例与此正则表达式:

$('article').html().match(/[^[\]]+(?=])/g) 

但不知道如何替换文本。

回答

3
$("div").html(function(i, html) { 
    return html.replace(/\[\[(.+?)\]\]/g, "<a href='/dictionary#$1'>$1</a>"); 
}); 

DEMO:http://jsfiddle.net/y4N6e/

+1

打败我吧,非常干净的解决方案。这会垃圾处理绑定在嵌套元素中的处理程序,但如果没有附加到'div'的后代的事件处理程序,则不值得迭代textNodes。 – 2013-02-13 22:23:31

+0

虽然这是完美的功能,但如果您不止有几种类型的东西被替换,性能可能是不可接受的。正则表达式效率不高。如果你正在制作一个wiki或论坛,或者有很多括号有限的标签的东西,你可能想要抓住每个标签开始和结束的索引,并将其传递给解释器函数。 – user1618143 2013-02-13 22:27:02

+0

@FabrícioMatté不错,我也考虑过了,首先想提供'.contents()'解决方案。最后,决定走向简单的innerHTML改变。 – VisioN 2013-02-13 22:28:57

0

喜欢的东西:

$('div').html($('div').html().replace(/\[\[([^\]]+)\]\]/, '<a href="/dictionary#$1">$1</a>') 

应该工作。你可以看看_.template method

+0

'.text()'在这里不是正确的方法。 – VisioN 2013-02-13 22:33:10

+0

检索'.text()'将消除所有后代元素并设置'.text()'不会创建锚元素,只是textNodes。 – 2013-02-13 22:36:58