限制数据列表显示的总条目数

新手上路,请多包涵

当数据列表中有一长串元素时,它们将全部显示出来,旁边有一个滚动条。有没有一种简单的方法可以只显示前 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>

原文由 Gus 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 550
2 个回答

使用一些现代的 javascript 和 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/

原文由 Olli K 发布,翻译遵循 CC BY-SA 3.0 许可协议

这不是原始问题的答案(开发人员 想要限制 数据列表中显示的项目)

但是我提出这个问题是因为我担心一个不同的限制(开发人员 不想限制 数据列表中显示的项目;但是 浏览器有限制Chrome 有 512 个限制;最多只显示 512 个选项一次)

这个 JSFiddle 演示了这个问题;请参阅下面的屏幕截图。

当然,当用户开始输入时(过滤数据列表中显示的选项),结果可能少于 512 个, _因此浏览器的这种限制不会很明显_。但是,如果您的用户希望看到您的数据列表中的每个选项并且过滤后的结果计数 > 512,请注意 Chrome 的限制。

 searchresults = document.getElementById('searchresults');

// Even though you add 1000 options to the datalist
// chrome will only show up to 512 of those options at one time
for (let i = 0; i < 1000; i++) {
  let option = document.createElement('option');
  option.innerText = 'Val ' + (i+1);
  searchresults.appendChild(option);
}

在左侧,代码显示向数据列表添加 1000 个选项,在右侧,UI 显示一次最多只列出其中的 512 个选项

如果您需要显示 > 512 个选项…

考虑 <select> 代替(在许多浏览器实现中,用户可以专注于选择,开始输入,并在这样做时“过滤”所选选项。但这仅限于搜索单词的开头,并且可能无法处理特殊字符。)

考虑带有“自动完成”/“组合框”控件的 UI 库( KendoUI 的“组合框”中的示例)或创建您自己的( AngularJS 中的示例

原文由 The Red Pea 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题