【发布时间】:2017-10-20 01:58:13
【问题描述】:
所以我有这个 JS 对象:
data = [
{
"id": "145",
"width": "12",
"length": "20",
"dealerPrice": "2.46",
"retailPrice": "3.90"
},
{
"id": "146",
"width": "14",
"length": "22",
"dealerPrice": "2.46",
"retailPrice": "3.90"
},
{
"id": "147",
"width": "19",
"length": "25",
"dealerPrice": "3.32",
"retailPrice":"5.50"
},
...
];
我的问题是,我该如何搜索这个?我找到了一个搜索算法并尝试将其调整为我的对象,但是它只有在我将属性值更改为字符时才有效。因此,如果我将"id": "145" 更改为"id": "foo" 等等,它就可以工作。为什么是这样?有一个更好的方法吗?任何帮助将不胜感激。
有问题的搜索算法:
$("#search-form").submit(function(e) {
e.preventDefault();
var query = $("#search-form input").val();
$(".product").hide();
$(".product").each(function() {
var id = $(this).data("id"),
width = $(this).data("width"),
length = $(this).data("length");
if (id.indexOf(query) > -1 || width.indexOf(query) > -1 || length.indexOf(query) > -1) {
$(this).show();
}
});
});
【问题讨论】:
-
您的 JsFiddle 在控制台中有错误。我建议您查看并修复它,除非这是您的问题的原因?
-
您展示的提交功能与您的
data对象有何关系?它搜索 HTML 元素属性值,而不是 JS 对象的属性。如果您尝试使用该版本的改编版本,请edit 您的问题以显示您实际使用的内容。 “仅当我将属性值更改为字符时才有效” - 在显示的data对象中,所有 属性值已经是字符串。 -
@nnnnnn "在显示的数据对象中,所有的属性值都已经是字符串" 不是
var id = $(this).data("id"),jQuery 将值转换为数字 -
@NewToJS 这个错误正是问题所在。调用 $(this).data('id") 和其他数据属性返回整数,而不是字符串,因此错误“indexOf 不是函数”是合适的,因为您无法在整数变量类型上执行该函数.
-
@guest271314 - 但是显示的函数没有访问
data对象:正如我已经说过的,它正在访问 HTML 元素属性。问题标题明确要求搜索 JS 对象,而不是搜索具有相似属性的 HTML 元素。
标签: javascript jquery html css search