你不应该只适用于正则表达式的HTML。这很难理解,也很难预测它有哪些副作用。相反,您应该使用具有完全解析的DOM树的优势,并将您关心的那些元素传递给它们:文本节点!
此外,我会建议你不要写如"<img src="$1" />"
的东西。如果$ 1包含奇怪的东西,那么奇怪的事情就会发生。没有必要考虑这可能导致的所有事情,因为一个非常简单的解决方法是:jQuery('<img />').attr('src', someTextWithNotTooWellCheckedContent)
。
这里是它如何工作的一个例子:
jQuery('#photos li').find('*').contents().filter(function() {
return this.nodeType == 3;
}).each(function(i, elem)
{
var matches = /(.*)(http:\/\/\S+(?:\.png|\.jpg|\.gif))(.*)/g.exec(elem.wholeText);
if (matches)
{
var parent = elem.parentNode;
var before = matches[1];
var replace = jQuery('<a />').attr('href', matches[2]).append(jQuery('<img />').attr('href', matches[2]))[0];
var after = matches[3];
parent.insertBefore(document.createTextNode(before), elem);
parent.insertBefore(replace, elem);
parent.insertBefore(document.createTextNode(after), elem);
parent.removeChild(elem);
}
});
在行动:http://jsfiddle.net/B4GPt/
PS:您可能会或可能不会需要以上通过更换find('*')
与find('*').andSelf()
取决于你的HTML扩展代码结构和意图。
感谢您对JSFIDDLE的演示。作品! –
这可能不太可能,但可能会破坏:http://jsfiddle.net/9aK7L/ – yankee
是的,我的解决方案依赖于HTML的完整性,但我怀疑标签将在URL内。 –