поиск и замена на jQuery - PullRequest
       5

поиск и замена на jQuery

2 голосов
/ 26 сентября 2010

Я хочу найти ключевое слово в теле и заменить его ссылкой, если оно уже нигде не связано. Мой код:

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

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

Проблема в том, что оно заменяет все ключевые слова, даже если они уже связаны.

Я не хочу заменять, если он уже связан.

может кто-нибудь подсказать мне, что делать ....

Ответы [ 2 ]

0 голосов
/ 09 ноября 2010
  • Выберите все текстовые узлы, у которых нет <a> родителей.
  • Найдите регулярное выражение только в текстовых узлах и выполните замену

    var regex = /jQuery/g;
    // Get all text nodes:
    var $textNodes = $("*").contents().filter(function() {
        return this.nodeType === 3 && 
            $(this).parent("a").length === 0;
    });
    
    
    <pre><code>// 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>, вы можете написать $("p span div")

0 голосов
/ 27 сентября 2010

Вы должны использовать селекторы 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 из своего регулярного выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...