突出显示查询在jQuery自动完成动态列表源
Highlight query in jQuery Autocomplete for dynamic List source
我正在尝试实现jQuery自动完成框并成功集成到我的项目中。这里我给出了jquery自动完成框作为列表元素的源代码。
var _array = ['<li height="45px" class="ui-menu-item ui_dropdown_item" role="presentation"><a id="ui-id-302" class="ui-corner-all ui_dropdown_focus" tabindex="-1"><img class="apps-share-chips-profile-icon" src="build/assets/apple.png" onerror="helper.onImageError(this);"><span search="text">01arun23@gmail.com</span></a></li>',
'<li height="45px" class="ui-menu-item ui_dropdown_item" role="presentation"><a id="ui-id-302" class="ui-corner-all ui_dropdown_focus" tabindex="-1"><img class="apps-share-chips-profile-icon" src="build/assets/ms.png" onerror="helper.onImageError(this);"><span search="text">aaron.lee@rescue.org</span></a></li>'];
如你所见,我将li元素作为源代码,并像下面这样在jQuery中绑定它。
$(this).data('ui-autocomplete')._renderItem = function(ul, item) {
return $(item.label).appendTo(ul);
};
所以我完成了功能。现在我想要实现的是突出显示用户输入的查询,就像在这个SO链接中给出的那样。
我的尝试如下所示,我试图用用户输入的查询替换span标记文本。我该如何在我的场景中实现这一点呢?
$(this).data('ui-autocomplete')._renderItem = function(ul, item) {
$(item.label).find('span').replace(new RegExp('(?![^&;]+;)(?!<[^<>]*)(' + $.ui.autocomplete.escapeRegex(this.term) + ')(?![^<>]*>)(?![^&;]+;)', 'gi'), '<span style="font-weight:bold;color:Blue;">$1</span>');
return $(item.label).appendTo(ul);
};
但我无法实现,我不知道我的解决方案出了什么问题。欢迎踊跃回答。
编辑:我已经添加了jsfiddle链接。只是想在其中添加高亮查询功能。由于我自己使用JQuery UI自动完成,我发现这很有趣,我尝试了一下。
首先:我不知道正则表达式是如何工作的,但我相信正则表达式是这里的问题。
第二:我发现这:大小写不敏感的字符串替换在JavaScript?
和这个正则表达式它为我工作:
.data("ui-autocomplete")._renderItem = function (ul, item) {
var t = highlightWords(item.label, this.term);
return $("<li></li>")
.data("item.autocomplete", item)
.append(t)
.appendTo(ul);
};
});
function highlightWords( line, word )
{
var regex = new RegExp( '(' + preg_quote(word) + ')', 'gi' );
return line.replace( regex, "<b>$1</b>" );
}
function preg_quote( str ) {
return (str+'').replace(/(['''.'+'*'?'['^']'$'(')'{'}'='!'<'>'|':])/g, "''$1");
}
希望这对你有帮助。:)
编辑:在我链接的stackoverflow问题中从接受的答案中添加了preg_quote函数,这是需要的,所以你可以搜索像'name '这样的东西。
相关文章:
- 如何在javascript而不是jquery中添加动态列表
- android phonegap jquery点击动态列表中的元素
- JSP中的动态列表框
- 使用PhoneGap和jQuery Mobile在android设备上显示动态列表视图
- JQuery Mobile UL列表仍然不能用于动态列表
- 将项目添加到动态列表
- 谷歌应用程序脚本web应用程序动态列表从表单
- 在动态列表中单击的特定img上执行JQuery
- 在jquery中滚动动态列表视图
- 无法更新复选框的动态列表
- 我无法将变量从动态列表传递到php页面进行处理.这是我不理解的逻辑问题吗
- 在 asp.net c# 中通过 POST 传递动态列表
- 将元素附加到动态列表,但浏览器不会刷新 UI
- 不使用排序数组的动态列表排序
- 基于 Javascript/jQuery 的带缩进的动态列表
- 带有动态列表的离子标签
- Jquery Mobile 中的动态列表视图和按钮
- 更改动态列表项的 CSS
- 无法使用JSON响应通过JQuery Mobile生成动态列表视图
- 使用AJAX和javascript将动态列表模型发布回控制器