2011-10-30 34 views
9

hoàn toàn trong JS, không có phần cuối máy chủ. Tôi cần cho phép người dùng tìm kiếm và sau đó hiển thị danh sách các tên phù hợp. Tôi đang sử dụng jQuery UI AutoComplete nhưng cần một số JS để lọc kết quả.Sử dụng JS/jQuery để thực hiện tìm kiếm chuỗi/kết hợp mờ?

Cho một mảng các tên:

Bob Hope 
James Jones 
Steve Jobs 
Larry McBridge 

Với cụm từ tìm kiếm như Bo

Làm thế nào tôi có thể nhận được chỉ là Bob Hope trở

Với một thuật ngữ tìm kiếm như b:

Làm thế nào tôi có thể nhận được tất cả trừ James Jones?

Bất kỳ JS đơn giản nào để so sánh hai chuỗi? Cảm ơn

+0

Để tiện lợi hơn của các độc giả trong tương lai, tôi đã triển khai một thư viện chỉ cho điều này: http: // g ithub.com/uohzxela/fuzzy-autocomplete – uohzxela

+0

@uohzxela - Vì lợi ích của bản thân mình, tôi đến đây để tránh ** bằng cách sử dụng thư viện (có đủ những thứ đó). Ngoài ra, một cái nhìn nhanh về số lần truy cập của bạn đã được tạo cho một trường hợp sử dụng rất cụ thể và không có khả năng giúp nhiều devs – vsync

Trả lời

7
var names = ["Bob Hope","James Jones","Steve Jobs","Larry McBridge"] 
var query = "bo" 
var results = $(names) 
     .map(function(i,v){ 
      if(v.toLowerCase().indexOf(query.toLowerCase())!=-1){return v} 
     }).get() 

// results is ["Bob Hope"] 
+0

Vì vậy, để kiểm tra một chuỗi nếu (stringToSearch.toLowerCase(). IndexOf (stringQuery.toLowerCase())! = -1) {alert ("match"); } –

1

Có lẽ tôi đã hiểu lầm bạn (do sự phức tạp của câu trả lời ở trên), nhưng tôi đã đưa ra this sử dụng jQuery. Mỗi khi một phím được nhấn (khi đầu vào có tiêu điểm), nó sẽ tìm kiếm tất cả các phần tử li trên trang và tìm xem chúng có chứa cụm từ tìm kiếm hay không.

Dưới đây là HTML:

<ul><li>Bob Hope</li> 
<li>James Jones</li> 
<li>Steve Jobs</li> 
<li>Larry McBridge</li></ul><br> 
Search: <input id="search" length="24" /> 

Và đây là jQuery của bạn:

$("#search").keyup(function(){ 
    $("li").hide(); 
    var term = $(this).val(); 
    $("li:contains('" + term + "')").show(); 
}); 
0

Sử dụng câu trả lời Ivan, nhưng với những thay đổi ES6:

var names = ["Bob Hope","James Jones","Steve Jobs","Larry McBridge"]; 

function findIn(s, list){ 
    return list.filter((v) => v.toLowerCase().indexOf(s.toLowerCase()) != -1); 
} 


findIn('bo', names); 
Các vấn đề liên quan