2013-02-26 221 views
13

द्वारा प्रदर्शित कुल प्रविष्टियों को सीमित करें जब एक डातालिस्ट में तत्वों का एक लंबा समूह होता है, तो वे सभी उनके बगल में स्क्रॉल बार के साथ प्रदर्शित होंगे। क्या शीर्ष 5 को प्रदर्शित करने का कोई आसान तरीका है, और बस दूसरों को काट दें?डाटलिस्ट

उदाहरण के लिए: http://jsfiddle.net/yxafa/

<input type="text" name="search" id="search" placeholder="type 'r'" list="searchresults" autocomplete="off"> 
<datalist id="searchresults"> 
    <option>Ray0</option> 
    <option>Ray1</option> 
    <option>Ray2</option> 
    <option>Ray3</option> 
    <option>Ray01</option> 
    <option>Ray11</option> 
    <option>Ray21</option> 
    <option>Ray31</option> 
    <option>Ray02</option> 
    <option>Ray12</option> 
    <option>Ray22</option> 
    <option>Ray32</option> 
    <option>Ray012</option> 
    <option>Ray112</option> 
    <option>Ray212</option> 
    <option>Ray312</option> 
    <option>Ray03</option> 
    <option>Ray13</option> 
    <option>Ray23</option> 
    <option>Ray33</option> 
    <option>Ray013</option> 
    <option>Ray113</option> 
    <option>Ray213</option> 
    <option>Ray313</option> 
    <option>Ray023</option> 
    <option>Ray123</option> 
    <option>Ray223</option> 
    <option>Ray323</option> 
    <option>Ray0123</option> 
    <option>Ray1123</option> 
    <option>Ray2123</option> 
    <option>Ray3123</option> 
</datalist> 
+1

चलो! दिलचस्प सवाल, +1! कोई जवाब क्यों नहीं है !? –

+0

ठीक है, मुझे नहीं लगता कि यह संभव है कि मैं एटीएम। आप 'अधिकतम लम्बाई = "4" 'या' पैटर्न = "रे [0123] \ d" ' –

+0

जैसी अन्य आवश्यकताएं जोड़कर प्रदर्शित वस्तुओं के सेट को केवल कम कर सकते हैं, यह भी ध्यान दें कि, लिखने के समय (मई 2014)' टेम्पलेट 'टैग केवल क्रोम, ओपेरा डेस्कटॉप, और मोज़िला एफएफ में समर्थित है। [यहां देखें] (http://caniuse.com/#search=template)। ['Datalist'] के लिए वही (http://caniuse.com/#search=datalist), + आईई 10+ – Tyblitz

उत्तर

7
कुछ आधुनिक जावास्क्रिप्ट के साथ

और HTML आप कुछ इस तरह कर सकता है।

यहाँ दस्तावेज़ है:

<template id="resultstemplate"> 
    <option>Ray0</option> 
    <option>Ray1</option> 
    <option>Ray2</option> 
    <option>Ray3</option> 
    <option>Ray01</option> 
    <option>Ray11</option> 
    <option>Ray21</option> 
    <option>Ray31</option> 
    <option>Ray02</option> 
    <option>Ray12</option> 
    <option>Ray22</option> 
    <option>Ray32</option> 
    <option>Ray012</option> 
    <option>Ray112</option> 
    <option>Ray212</option> 
    <option>Ray312</option> 
    <option>Ray03</option> 
    <option>Ray13</option> 
    <option>Ray23</option> 
    <option>Ray33</option> 
    <option>Ray013</option> 
    <option>Ray113</option> 
    <option>Ray213</option> 
    <option>Ray313</option> 
    <option>Ray023</option> 
    <option>Ray123</option> 
    <option>Ray223</option> 
    <option>Ray323</option> 
    <option>Ray0123</option> 
    <option>Ray1123</option> 
    <option>Ray2123</option> 
    <option>Ray3123</option> 
</template> 
<input type="text" name="search" id="search" placeholder="type 'r'" list="searchresults" autocomplete="off" /> 
<datalist id="searchresults"></datalist> 

और यहाँ है js:

var search = document.querySelector('#search'); 
var results = document.querySelector('#searchresults'); 
var templateContent = document.querySelector('#resultstemplate').content; 
search.addEventListener('keyup', function handler(event) { 
    while (results.children.length) results.removeChild(results.firstChild); 
    var inputVal = new RegExp(search.value.trim(), 'i'); 
    var clonedOptions = templateContent.cloneNode(true); 
    var set = Array.prototype.reduce.call(clonedOptions.children, function searchFilter(frag, el) { 
     if (inputVal.test(el.textContent) && frag.children.length < 5) frag.appendChild(el); 
     return frag; 
    }, document.createDocumentFragment()); 
    results.appendChild(set); 
}); 

और यहाँ एक जीवित उदाहरण है: http://jsfiddle.net/gildean/yxafa/6/

+0

के लिए आंशिक समर्थन बस आश्चर्यचकित करें, 'getElementById' के बजाय इस मामले में' document.querySelector' का उपयोग क्यों करें उत्तरार्द्ध बहुत तेज़ और अधिक कुशल है? http://jsperf.com/getelementbyid-vs-queryselector – Tyblitz

+1

यह याद रखने के लिए सिर्फ एक अच्छा एपीआई है। और इस उदाहरण में हम केवल एक बार चयन कर रहे हैं, इसलिए इससे कोई फर्क नहीं पड़ता। –