我想将一个关键字搜索到正文中,如果它已经没有链接到某个地方,则用链接替换它。我的代码是:
var search = $('body').html();
search = search.replace(/jQuery/g, function($1){
return('<a href="http://jquery.com">' + $1 + '</a>');
});
$('body').html(search);
问题是,它取代了所有关键字,即使它已被链接。
如果已经链接,我不想替换。
任何人都可以建议我,该做什么......
答案 0 :(得分:0)
您应该使用jQuery选择器来搜索链接。
$(document).ready(function() {
var links, search;
$links = $('a[href=http://jquery.com]');
if ($links.length) {
search = $('body').html().replace(/jQuery/g, function($1){
return('<a href="http://jquery.com">' + $1 + '</a>');
});
$('body').html(search);
}
});
如果您只想替换“jQuery”的第一个实例,请从正则表达式中删除g
修饰符。
答案 1 :(得分:0)
<a>
个父母的所有文本节点。仅在文本节点中查找正则表达式并执行替换
var regex = /jQuery/g;
// Get all text nodes:
var $textNodes = $("*").contents().filter(function() {
return this.nodeType === 3 &&
$(this).parent("a").length === 0;
});
// Iterate through the text nodes, replacing the content
// with the link:
$textNodes.each(function(index, element) {
var contents = $(element).text();
contents = contents.replace(regex, "<a href='http://www.jquery.com'>jQuery</a>");
$(element).replaceWith(contents);
});
我不建议使用“*”选择器,因为它会导致性能问题。将该选择器替换为更准确的内容(例如,如果您在// Iterate through the text nodes, replacing the content
// with the link:
$textNodes.each(function(index, element) {
var contents = $(element).text();
contents = contents.replace(regex, "<a href='http://www.jquery.com'>jQuery</a>");
$(element).replaceWith(contents);
});
内查找文本,则可以编写<p>, <span>, <div>