jquery:找到一个字符串并将其包装在<a> tag?</a>中

时间:2010-08-05 10:24:29

标签: jquery

我有这个:

<div class="" id="fancy_hover">
    <a href="home.html" id="start_writer"></a>  
    <div>
        <p class="hidden" style="display: block;">click here to see this event with all the bells and whistles</p>
    </div>
</div>

我需要做一个等效的.find(),但对于字符串"click here"而不是节点,我需要将其包装在<a>标记中。

使用jquery的最佳方法是什么?

2 个答案:

答案 0 :(得分:19)

使用:contains过滤器选择器:

$('p.hidden:contains("click here")')

将其包装在链接中:

$('p.hidden:contains("click here")').html()
.replace('click here', '<a href="url">click here</a>');

将全文包装在链接中

$('p.hidden:contains("click here")')
.html('<a href="url">' + $('p.hidden:contains("click here")').text() + '<a>');

更多信息:

答案 1 :(得分:7)

不要使用HTML字符串黑客攻击。想象一下,如果您尝试将<span title="blah click here blah">...</span>替换为<a>标记,那将会发生什么......严重损坏的标记。这只是问题的开始。

相反,迭代要检查的文档部分中的文本节点,查找文本匹配并使用DOM样式方法插入新链接。

jQuery在这里并没有真正帮助你,因为它没有处理文本节点的功能。相反,请使用this question中的findText()函数,并使用splitText拆分文本节点:

findText($('#fancy_hover')[0], /\bClick here\b/gi, function(node, match) {
    node.splitText(match.index+match[0].length);
    var link= document.createElement('a');
    link.href= 'http://www.example.com/';
    link.appendChild(node.splitText(match.index));
    node.parentNode.insertBefore(link, node.nextSibling);
});