JSON для массива и поиска и замены внутри массива - PullRequest
1 голос
/ 09 мая 2011

У меня есть небольшая функция обратного вызова для поля ввода автозаполнения jQuery. Функция имеет 2 параметра: term = строка, введенная в поле ввода, и url = URL-адрес скрипта php, который генерирует предложения.

Сценарий выглядел так:

function m(term,url) {
   var y = '';
   jQuery.get(url, { term:term }, function(data){ });
   return y;
}

Все, что вы вводите в текстовое поле, отправляется в скрипт php, который возвращает список предложений.

Внутри блока function(data){} должны произойти две вещи:

  1. кодирует строку JSON в массив (который необходим автозаполнению JQuery в качестве возвращаемого значения). Я попробовал это: y=eval("(" + data + ")");. Это правильно? Строка JSON, генерируемая со стороны PHP, выглядит следующим образом (пример для term = "nur")

    ["nuri al maliki", "nursultan nasarbajew", "n \ u00fcrnberger prozess"] n \ u00fcrnberger - это закодированная версия "nürnberger"

  2. Выделите термин внутри предложенного слова. Пример: входное значение равно «ris», поэтому пример подсказки должен выглядеть примерно так: sun<b>ris</b>e.

Есть ли способ использовать что-то вроде .replace для массива?

Приложение работает в среде Yii - поэтому я хотел бы найти решение для этого.

Ответы [ 3 ]

1 голос
/ 09 мая 2011

Говорят, что eval - это зло, вам не нужно разбирать жало в json, просто используйте json_encode

пожалуйста, посмотрите также удаленный пример

для форматирования см. эту ветку предоставлено @DarthJDG

0 голосов
/ 11 мая 2011

Я попробовал ссылку из DarthJDG и перешел к такому вопросу SO: jQueryUI: как мне отформатировать результаты плагина автозаполнения?

Я думаю, что из-за недостаточных знанийJavascript / Jquery / ... Мне не удалось применить это решение к моему приложению.Все время я получал ошибку "$ .ui не определен".Задача (для меня) заключалась в следующем: где разместить этот код в сочетании с фреймворком Yii, который я использую.

Поэтому я получил помощь от форума Yii, и мне нравится размещать здесь явное решение.

Вы просто должны зарегистрировать следующий скрипт.Важно зарегистрировать это на POS_LOAD:

Yii::app()->clientScript->registerScript('highlightAC','$.ui.autocomplete.prototype._renderItem = function (ul, item) {
            item.label = item.label.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(this.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
            return $("<li></li>")
                    .data("item.autocomplete", item)
                    .append("<a>" + item.label + "</a>")
                    .appendTo(ul);
        };',CClientScript::POS_LOAD); 

Вот и все.(Спасибо Антонио с форума Yii)

0 голосов
/ 09 мая 2011

Вы можете определить, что полученная вами строка приходит в формате JSON:

jQuery.get(url, { term:term }, function(data){ }, "json");

Затем в функции обратного вызова просмотрите полученные элементы и замените найденную строку на завернутую версию:

for (i=0, iLen=data.length; i<iLen; i++) {
    data[i] = data[i].replace(new RegExp(term), "<b>$1</b>");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...