Плагин автозаполнения jQuery - пользовательская функция выделения - PullRequest
2 голосов
/ 01 августа 2010

Мои результаты автозаполнения для каждого элемента выглядят примерно так:

<h3>Celebrity Sweepstakes</h3><p>0 episodes</p>

Но я хочу выделить только заголовок внутри H3.См. Функцию «выделения» ниже.Я не уверен, как изменить этот оригинальный RegExp, чтобы заменить только внутри заголовка.

$(".show_autocomplete").autocomplete("/shows.js", {
        minChars: 2,
        max: 100,
  formatItem:function(item, index, total, query){
    return "<h3>" + item.title + "</h3><p>" + item.episodes + " episodes</p>"
  },
  formatMatch:function(item){
    return item.title;
  },
  formatResult:function(item){
    return item.title;
  },
  dataType:'json',
  parse:function(data) {
    return $.map(data, function(item) {
      return {
        data: item,
        value: item.title,
        result: item.title
      }
    });
  },
  highlight: function(value, term) {
    var title = value.split("</h3>")[0].replace("<h3>", ""); //only replace inside this?
    return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"); //original regexp
  }
}); 

Ответы [ 2 ]

0 голосов
/ 07 августа 2010

Зачем делать это сложнее, чем правильно?:) Это то, что я получил от вашей идеи и прекрасно работает:

  formatItem:function(item, index, total, query){
    return "<h3><a href=\"/show/" + item.permalink + "\">" + item.title + "</a></h3><p>" + item.followers + " followers | " + item.episodes + " episodes</p>"
  },

  highlight: function(value, term) {
    var value = $(value);
    value.find("a").html(value.find("a").html().replace(RegExp(term, "gi"), "<strong>" + term + "</strong>"));
    return value;
  }
0 голосов
/ 01 августа 2010

Лучше всего решить эту проблему, разбив ее немного дальше.Помимо того факта, что он не применяется только к <h3> -контенту, текущая реализация работает иначе, как нужно?

Если это так, то вместо усложнения регулярного выражения вы можете отделитьФункциональность немного.Добавьте код для идентификации и извлечения заголовка / <h3> -контента, а затем выполните выделение этого кода с помощью имеющегося у вас кода.Затем возьмите результаты и объедините их с остальной частью исходного ввода и вуаля, <h3> - только выделение.

Вторым преимуществом является то, что этот подход, вероятно, сделает ваши намерения значительно более ясными, чем сложныйрегулярное выражение, помогающее в будущем обслуживании, если потребуются другие корректировки.

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