【发布时间】:2017-07-14 21:36:25
【问题描述】:
我正在尝试添加一个搜索过滤器以按“data-”标签对我的 HTML 元素进行排序,但我尝试从 JavaScript 生成的一些按钮根本不显示。
$(function() {
var $imgs = $("#people img");
var $buttons = $("#buttons");
var qualities = {};
$imgs.each(function() {
var properties = $(this).data("qualities");
if (properties) {
properties.split(",").forEach(function(quality) {
if (qualities[quality] == null) {
qualities[quality] = [];
}
qualities[quality].push(p);
});
}
});
$("<button/>", {
text: "All",
class: "on",
click: function() {
$(this).addClass("on").siblings().removeClass("on");
$imgs.show();
}
}).appendTo($buttons);
$.each(qualities, function(quality) {
$("<button/>", {
text: quality + " (" + qualities[quality].length + ")",
click: function() {
$(this).addClass("on").siblings().removeClass("on");
$imgs.hide().filter(qualities[quality]).show();
}
}).appendTo($buttons);
});
});
这是一个 JSFiddle:https://jsfiddle.net/1pxp3j9t/
我不确定为什么其中一个按钮会显示,而其他按钮却没有。
【问题讨论】:
-
您错误地声明了您的数组。需要使用 [ ],而不是 {}。它没有加载其他按钮,因为“质量”是未定义的,所以它永远不会进入你的每个循环。变量质量 = {};应该是 var quality = [];
-
@Mathyou 根据您的 html,没有要循环的图像,因此不会创建按钮,因为您的质量对象是空的。
-
请在问题本身中包含所有相关的 HTML、CSS 和 JavaScript,在 Stack Overflow 上。 不要只链接到它。如果该站点被某人的公司防火墙阻止,或者只是关闭,那么这个问题就没有意义了。
标签: javascript jquery html arrays object