用jQuery搜索和替换

时间:2010-09-26 18:39:41

标签: javascript jquery jquery-plugins

我想将一个关键字搜索到正文中,如果它已经没有链接到某个地方,则用链接替换它。我的代码是:

var search = $('body').html();
search = search.replace(/jQuery/g, function($1){
    return('<a href="http://jquery.com">' + $1 + '</a>');
});

$('body').html(search);

问题是,它取代了所有关键字,即使它已被链接。

如果已经链接,我不想替换。

任何人都可以建议我,该做什么......

2 个答案:

答案 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, "&lt;a href='http://www.jquery.com'&gt;jQuery&lt;/a&gt;");
        $(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, "&lt;a href='http://www.jquery.com'&gt;jQuery&lt;/a&gt;"); $(element).replaceWith(contents); }); 内查找文本,则可以编写<p>, <span>, <div>