我有以下代码:
function getArticleContent() {
var toPromote = 'example';
var toReplace = '<a href="/tags/'+toPromote+'">'+toPromote+'</a>';
var content = $(".a-entry").text();
if (content.search(toPromote) > -1)
{
$('.a-entry').html($('.a-entry').html().replace(new RegExp(toPromote, "g"), toReplace) );
}
else
{
//
}
}
$(document).ready(function() {
getArticleContent();
});
代码工作正常,但如果图像或链接的标题或 alt 属性与我要替换 html 的文本相同,它就会损坏,因为脚本将链接放在 alt 或标题标签中。
最好的问候
我正在尝试做这样的事情:
<div id="article">
<p>Some text here, bla bla.</p>
</div>
在 JS 函数之后我想成为:
<div>
<p>Some text <a href="/tags/here">here</a>, bla bla.</p>
</div>
最佳答案
你可以这样做,虽然可能有更短的方法(文本节点对我来说非常很少见):
function getArticleContent() {
var toPromote = 'example';
$(".a-entry").contents().filter(function() { return this.nodeType == 3; })
.each(function() {
if(this.nodeValue.indexOf(toPromote) > -1)
$(this).replaceWith(this.nodeValue.replace(new RegExp(toPromote, "g"),
function(m) { return '<a href="/tags/'+m+'">'+m+'</a>'; })
);
});
}
$(getArticleContent);
You can try a demo here .此过滤器专门针对文本节点 nodeType == 3
, 对于 .each()
其中,它循环遍历,如果文本存在,则用相应的链接替换每个匹配项。
关于Javascript 替换问题(使用 alt 和 title 属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3165424/