2013-01-29 4 views
-2

Как я могу выполнить поиск по имени и фамилии с помощью массива javascript? и каждый раз, когда я ищу что-то, что начинается с je, div = result показать мне все Имя и фамилии с Je в этом случае Джессика и Джей;
Это будет событие onkeydown, не так ли?Как выполнить поиск с массивом

<input type='text' id='filter' placeholder='search in array'> 

здесь напечатать результат:

<div id='result'></div> 

это мой массив:

var datos = [ ['Jessica','Lyn',3], 
     ['Jhon','Cin',5], 
     ['Alison','Peage',1], 
     ['Thor','zhov',12], 
     ['Jey','hov',32] 
     ]; 
+1

Не могли бы вы показать нам код поиска, который вы написали? В чем проблема? –

+0

вы можете использовать библиотеку jqueryui, которая похожа на подсказки facebook во время поиска друзей, используя @ в комментариях http://jqueryui.com/autocomplete/ – user2016558

ответ

1
var $result = $('#result'); 

$('#filter').on('keyup', function() { 
    var $fragment = $('<div />'); 
    var val = this.value.toLowerCase(); 
    $.each(datos, function (i, item) {console.log(item[0].toLowerCase().indexOf(val)); 
     if (item[0].toLowerCase().indexOf(val) == 0) { 
      $fragment.append('<p>' + item[0] + ' ' + item[1] + '</p>'); 
     } 
    }); 
    $result.html($fragment.children()); 
}); 

Вот скрипка: http://jsfiddle.net/GkWGk/

+1

почему у результата есть $? –

+3

@chikatetsu - Просто указать, что это коллекция jQuery. –

+2

@chikatetsu: '' '' в '$ result' определяет, что' $ result' - это переменная, которая является оберткой jQuery. Это быстрый способ различать обычные переменные JavaScript и переменные, которые вы можете использовать при использовании методов jQuery, без необходимости повторного переноса. – Nope

2
$("#filter").on('keyup', function() { 
    var val = $(this).val(); 
    $("#result").empty(); 
    $.each(datos, function() { 
     if (this[0].indexOf(val) >= 0 || this[1].indexOf(val) >= 0) { 
     $("#result").append("<div>" + this[0] + ' ' + this[1] + "</div>"); 
     } 
    }); 
}); 

http://jsfiddle.net/MqTBm/

1

Простой ответ - запустить цикл for над массивом, проверяющим каждый элемент. Однако это не очень хорошая идея, если у вас большой массив. Существует множество способов индексирования массива. Размышляя над моей головой, я мог бы построить второй массив, в котором хранятся поля, объединенные как одна строка в качестве индекса, а затем ссылка на массив. Таким образом, вы можете выполнить цикл через ссылочный объект. Найдите запись со строковыми сравнениями. Возьмите ссылку индекса на реальный массив.

+0

Этот квази-связанный [SO-вопрос] (http://stackoverflow.com/questions/7531414/lucene-like-searching-through-json-objects-in-javascript) имеет ответ, который лучше описывает то, о чем я говорил. – Sukima

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