2013-04-10 2 views
0

Я работаю над функциональностью, которая будет конвертировать соответствующие tags или keywords в ссылки внутри определенного DIV тегов.обертывание совпадающих слов по ссылке с помощью jquery

фона: хранить текст статьи & ключевые слова, связанные со статьями в базе данных & во время отображения статьи на веб-странице я передать ключевые слова, как и массив функции 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/

ответ

1

Я думаю, что самый простой способ будет использовать word boundaries. Таким образом, вы бы что:

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

Edit:
Быстрый хак, чтобы быть уверенным, что это не соответствуя US внутри HTML элементов:

var pattern = new RegExp("(\\b"+this+"\\b)(?![^<]*?>)", ["gi"]); 
+0

, используя это, не приводит к какому-либо выбору вообще. – Learning

+0

@KnowledgeSeeker извините, не используется для создания регулярного выражения таким образом, вам нужно будет дважды сбежать. Ред. – Loamhoof

+0

Я ценю ваш ответ в любом случае ... – Learning

1

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

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

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

+0

Anjith: это может быть один из способов. Я буду продолжать пытаться таким образом, я не смогу сопоставить такие работы, как 'amazon,' – Learning

Смежные вопросы