2011-10-30 8 views
9

पूरी तरह से जेएस में, कोई सर्वर बैकएंड नहीं। मुझे उपयोगकर्ता को खोजने की अनुमति देने की आवश्यकता है और फिर मिलान किए गए नामों की एक सूची दिखाएं। मैं jQuery UI स्वत: पूर्ण का उपयोग कर रहा हूं लेकिन परिणामों को फ़िल्टर करने के लिए कुछ जेएस की आवश्यकता है।स्ट्रिंग खोज/अस्पष्ट मिलान करने के लिए जेएस/jQuery का उपयोग करना?

नामों में से किसी सरणी को देखते हुए:

Bob Hope 
James Jones 
Steve Jobs 
Larry McBridge 

बो की तरह एक खोज पद को देखते हुए

कैसे मैं सिर्फ बॉब होप

वापस जाने के लिए ख की तरह एक खोज शब्द को देखते हुए प्राप्त कर सकते हैं:

मैं जेम्स जोन्स के अलावा सभी कैसे प्राप्त कर सकता हूं?

दो स्ट्रिंग की तुलना करने के लिए कोई साधारण जेएस? धन्यवाद

+0

लाभ के लिए भविष्य के पाठकों के लिए, मैंने केवल इसके लिए एक पुस्तकालय लागू किया है: http: // g ithub.com/uohzxela/fuzzy-autocomplete – uohzxela

+0

@uohzxela - मेरे लाभ के लिए, मैं यहां आया था ** ** लाइब्रेरी का उपयोग करके ** उनसे बचें (उनमें से पर्याप्त था)। इसके अलावा, आपके हिट पर एक त्वरित नज़र यह एक बहुत ही विशिष्ट उपयोग-मामले के लिए बनाई गई थी और – vsync

उत्तर

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

में मदद करने की संभावना नहीं है तो एक स्ट्रिंग का परीक्षण करने के लिए यदि (stringToSearch.toLowerCase()। IndexOf (stringQuery.toLowerCase())! = -1) {चेतावनी ("मैच"); } –

1

शायद मैंने आपको गलत समझा (उपरोक्त उत्तर की जटिलता को देखते हुए), लेकिन मैं this के साथ आया जो jQuery का उपयोग करता है। हर बार एक कुंजी दबाया जाता है (जब इनपुट फोकस होता है), यह पृष्ठ पर सभी li तत्वों को खोजता है और पता चलता है कि उनमें खोज शब्द है या नहीं। यहाँ

<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" /> 

और है अपने jQuery:

यहाँ HTML है

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

इवान के उत्तर का उपयोग करना है, लेकिन 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); 
संबंधित मुद्दे