jQuery匹配JSON对象的部分文本
jQuery match partial text of JSON object
我正在为我的网站做实时搜索结果功能。我有一个JSON对象,其中包含我希望与输入值匹配的关键字。
我能想到的最好的解决方案是在循环中迭代每个项,并使用jQuery选择器查找部分匹配。我怎样才能做出这样的if语句?例如:
$.getJSON('jsonfile.json', function(data) {
key = Object.keys(data);
for(i=0;i<key.length;i++)
{
if($(input[value]:contains == key[i].term)
{
//do something
}
}
}
编辑:我很抱歉说不清楚。我使用:contains选择器对一个输入的值进行部分匹配。
您需要将:contains
选择器构建为字符串:
if($('input[value]:contains("' + key[i].term + '")').length) {
//do something
}
选择器将返回输入中包含术语的所有元素;添加.length
为if语句提供了一个简单的"truthy"值以进行求值(返回0项="false",返回>0项="true")。
EDIT:我不确定input[value]:contains()
是否是有效的jQuery选择器,因为我不知道:contains()
在输入元素上看到什么文本。您可能需要通过自己检查每个输入的值来帮助它。您可以将找到的输入筛选为值包含您正在搜索的术语的输入:
if ($('input[value]').filter(function() {
return $(this).val().indexOf(key[i].term) != -1;
}).length) {
//do something
}
如果你有很小的项目(比如几十个),你可以创建一个匹配它们的正则表达式:
var match = keys.join("|")
var regexp = RegExp.new(match, 'i') // Case insensitive
if($(input).val().match(regexp)) {
// do stuff
}
是的,我知道这不会搜索任何与术语匹配的输入,你必须提前知道输入元素,但根据你的问题,我认为你想检查一个输入元素。
不知道它是否比循环所有术语并逐个检查更快,但我认为它确实更快,而且绝对更可读。
这可以与jQuery的grep
或each
方法结合使用:
var match = keys.join("|")
var regexp = RegExp.new(match, 'i')
// With grep
var matches = $('input').grep(function(elem, idx) {
return $(input).val().match(regexp) != null;
})
// Or with each
$('input')..each(function(idx, elem) {
if ($(input).val().match(regexp) != null) {
// Do stuff
}
});
grep
选择与任何搜索项匹配的所有输入字段以供以后使用,each
对所有元素进行迭代以立即对其进行操作。
相关文章:
- jQuery匹配JSON对象的部分文本
- JavaScript正则表达式文本与RegExp对象
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- 嵌套对象文本访问父级
- .notion vs.[]notation |插入到文本对象中
- 在node.js中使用JavaScript从JSON对象获取和设置文本内容
- 如何从jQuery对象文本正确调用服务器端ASP.NET并将数据返回给jQuery
- 在SVG中创建带有外来对象的文本区域的Javascript不起作用
- 使用javascript函数检索隐藏的文本值时出现对象HTMLinputElement错误
- TextInput onChange事件接收的是文本对象而不是字符串
- 使用结构 js 向右/向左倾斜画布文本对象
- 文本对象到路径:如何从使用Cambam字体的Raphael js中使用打印方法时生成的双路径中删除单个路径
- 将其绑定到嵌套文本对象中
- jQuery在单击不同的输入文本对象时替换文本
- 当将多个子元素附加到svg文本对象时,每次都需要一个新的子元素
- 如何在结构文本对象中应用自定义字体
- Javascript文本对象符号This vs Object Name
- 如何在PIXI.js的本地容器中居中文本对象
- 文本对象中的HTML
- 为函数中的文本对象设置样式