多选列表即时搜索正常工作,但需要保留<optgroup>标签
Multiple select list instant search is working but need to keep <optgroup> tags
HTML:
<select multiple="multiple" id="list" size="10">
<optgroup label="Group A">
<option>Apple</option>
<option>Banana</option>
</optgroup>
<optgroup label="Group B">
<option>Orange</option>
<option>Kiwi</option>
</optgroup>
</select><br>
<input type="text" id="findItem">
JavaScript:
jQuery(function() {
var opts = jQuery('#list option').map(function() {
return [[jQuery(this).text()]];
});
jQuery('#findItem').keyup(function() {
var rxp = new RegExp(jQuery('#findItem').val(), 'i');
var optlist = jQuery('#list').empty();
opts.each(function() {
if(rxp.test(this[0])) {
optlist.append(jQuery('<option/>').text(this[0]));
}
});
});
});
JSFIDDLE: http://jsfiddle.net/vou3oa58/
即时搜索工作正常,但标题消失了,因为 empty(( 只是删除了列表中的所有父元素和子元素。我想在执行搜索和显示匹配项时保留组。
在构建规范的"opts"列表时,您需要使用更结构化的数据对象来考虑 optgroup 嵌套。例如,对于您的 HTML 代码段,选项可能如下所示:
[{'label': 'Group A', opts: ['Apple',...]}, {'label': 'Group B', opts: [...]}, ..]
构建此函数的循环可能如下所示:
var optList = [];
jQuery('#list optgroup').each(function() {
var $group = $(this),
optgroup = {'label': $group.attr('label'), opts: []};
$group.find('option').each(function() {
optgroup.opts.push(this.innerText);
});
optList.push(optgroup);
});
然后,您只需遍历新数据,将内部"opts"数组值与输入值进行比较......当然,为您找到的任何匹配项构建新的 Optgroup/Option 标记。
要重置列表的整个内部 HTML,并在清除列表时替换它:
var optionHTML = $("#list")[0].innerHTML;
然后重置列表:
$("#list").html(optionHTML);
相关文章:
- 分派点击事件并保留击键修饰符
- 在<页眉>标签
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- 使用 struts 标签和 Javascript 的动态行为保留表单中的值
- 在 ChartJS 中截断画布标签,同时在工具提示中保留完整的标签值
- JavaScript 不会保留新的标签内容来执行函数
- JavaScript 正则表达式,用于保留 span 标签并删除其他标签
- 为什么新创建的输入标签不会保留在页面上
- 将单词包装在标签中,保留标记
- 使用 PHP 查找并删除一些 javascript 标签,但保留另一个标签
- HTML/JQuery:如何打开文件;不闪烁新标签;并保留当前页面状态
- 玉用保留字作标签
- 如何在调用函数后保留标签的值
- 多选列表即时搜索正常工作,但需要保留
- Jquery循环页面缩略图图像-保留主图像链接标签
- 过滤多选择框后,如何保留optgroup标签?
- 在
带有's的标签,但保留其他标签
- 删除html标签,但保留断点
- 在树状地图高图中保留父数据标签
- 删除HTML标签,但保留内部HTML