0

我正在开发一种功能,它将匹配tagskeywords转换为特定DIV标签内的链接。

背景:我将文章正文和与文章相关的关键字存储在数据库中,同时在网页中显示文章时,我将关键字 as 和数组传递给 jQuery 函数,然后搜索内部文本 <div id ="article-detail-desc" > ...</div>并将每个匹配元素转换为链接。

我的代码工作正常,但它有流程。

  1. 它不会搜索任何匹配的单词,即使它是破坏我的 HTML 代码的单词或 HTML 元素的一部分。

如何修改此函数以便它也搜索匹配的单词

function HighlightKeywords(keywords)
{        
    var el = $("#article-detail-desc");
    var language = "en-US";
    var pid = 100;
    var issueID = 10; 

    $(keywords).each(function()
    {
        var pattern = new RegExp("("+this+")", ["gi"]);
         var rs = "<a class='ad-keyword-selected' href='en/search.aspx?Language="+language+"&PageId="+pid+"&issue="+issueID+"&search=$1' title='Seach website for:  $1'><span style='color:#990044; tex-decoration:none;'>$1</span></a>";
        el.html(el.html().replace(pattern, rs));
    });
}   

HighlightKeywords(["Amazon","Google","Starbucks","UK","US","tax havens","Singapore","Hong Kong","Dubai","New Jersey"]);

小提琴上的链接http://jsfiddle.net/Dgysc/25/

4

2 回答 2

1

我认为最简单的方法是使用单词边界。所以你会有这样的:

var pattern = new RegExp("(\\b"+this+"\\b)", ["gi"]);

编辑:
快速破解以确保它US与 html 元素内部不匹配:

var pattern = new RegExp("(\\b"+this+"\\b)(?![^<]*?>)", ["gi"]);
于 2013-04-10T12:46:18.227 回答
1

由于我们使用的是直接词匹配,因此在关键字前后添加空格可能会对您有所帮助,

var pattern = new RegExp("( "+this+" )", ["gi"]);

http://jsfiddle.net/Dgysc/28/

于 2013-04-10T12:56:56.673 回答