-1

我正在尝试构建一个将文本替换为我想使用 javascript 执行的链接的功能。

这是我将引用的一些示例 html:

<div class="linkify">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. <a href="http://...">Nullam elit</a> risus, blandit eu pretium quis, porta a odio. Nullam rhoncus, lectus ac faucibus rutrum, dui massa dignissim nisi, ut auctor ipsum mi eget justo. Nam nec leo eget neque viverra pulvinar a aliquet lorem. Suspendisse sodales odio pretium lacinia pharetra. Donec at sapien a eros fermentum vehicula at sagittis felis. Proin eu venenatis leo. Phasellus volutpat auctor leo, ac dignissim risus fringilla eget.</p>
</div>

我想在任何“linkify”类中找到一段命名的文本并用<a>标签包装它,但是我也想避免在父标签已经是<a>.

我对 jquery 不太好,在 Google 上找到答案是一个非常具体的要求,但是有人知道如何创建这个 jquery 语句吗?

谢谢

4

3 回答 3

0

此解决方案适用于任意一组字符串:

var matches = ['Nullam elit', 'pretium quis', 'venenatis leo'];

$('.linkify').each(function(idx, el) {
    $.each(matches, function(idx, val) {
        if ($(el).html().indexOf(val) !== -1) {
               $(el).html($(el).html().replace(val, '<a href="#whatever">' + val + '</a>'));
        }
    });
});

$('a a').unwrap(); 
$('a:empty').remove();

jsFiddle - http://jsfiddle.net/CTzNU/

于 2013-09-30T14:57:57.587 回答
0

尝试这个

function replaceToLink(str,href) {
    $('.linkify :contains("' + str + '")').html(function () {
        var check = $('.linkify a:contains("'+str+'")');
        if(check.length ==0){           
        return $(this).html().replace(str, "<a href='"+href+"'>" + str + "</a>")
        }
    });
}

像这样使用它

replaceToLink('nisi','http://google.se');

演示

于 2013-09-30T14:50:28.993 回答
0

这样的事情怎么样?

$('.linkify').each(function(k, v){

    var text = $(v).find('p').text();

    if(text.indexOf('pieceoftext') > -1){

         var $p = $(v).find('p'),
             newHtml = $p.html()
                        .replace('pieceoftext', '<a href="#">pieceoftext</a>');

         if(!$(v).parent().is('a')){
             $p.html(newHtml);
         }
    }
});

indexOf有点过分了。我只是为了可读性添加了它。

http://jsfiddle.net/xvwMc/4/

于 2013-09-30T14:44:24.940 回答