编辑4
嗯,我做到了,但它并不理想。我现在看看按钮有哪个类并运行代码。如果有人能弄清楚如何让它正常工作(或至少解释为什么它不会)我仍然会欣赏它,但我现在就让它这样做。:
$(function () {
var post = $('ul#filtrifyContainer').find('li'),
ft = $.filtrify("filtrifyContainer", "placeHolder"),
data = $(post).data(),
genre = $(post).data("genre"),
number = $(post).data("number");
var Filter = function(category){
$(post).each(function () {
var attribute = $(this).data(category);
$(this).append('<a class="button small ' + category + '">' + attribute.split(',').join('</a><a class="button small ' + category + '">') + '</a>');
$('a.button').click(function (e) {
e.stopImmediatePropagation();
var buttonText = $.trim($(this).text());
console.log(category);
console.log(buttonText);
ft.trigger({category: [buttonText]});
});
});
};
if($(this).hasClass('genre')){
ft.trigger({genre: [buttonText]});
}
if($(this).hasClass('number')){
ft.trigger({number: [buttonText]});
}
});
这是工作小提琴:http://jsfiddle.net/fletchling/JLN6J/13/
编辑3
我正在使用Luis Almeda's Filtrify插件。我正在打印一个帖子中的数据属性列表,分离项目并将它们转换为触发过滤器的按钮。这样,用户可以使用下拉菜单进行过滤,也可以在浏览项目时单击按钮。无法滚动到页面顶部进行过滤。我最终使用此代码执行此操作:
$(function () {
var post = $('ul#filtrifyContainer').find('li'),
ft = $.filtrify("filtrifyContainer", "placeHolder"),
data = $(post).data(),
genre = $(post).data("genre"),
number = $(post).data("number");
var Filter = function(category){
$(post).each(function () {
var attribute = $(this).data(category);
$(this).append('<a class="button small ' + category + '">' + attribute.split(',').join('</a><a class="button small ' + category + '">') + '</a>');
$('a.button').click(function (e) {
e.stopImmediatePropagation();
var buttonText = $.trim($(this).text());
console.log(category);
console.log(buttonText);
ft.trigger({category: [buttonText]});
});
});
};
if(genre)Filter('genre')
if(number)Filter('number')
});
我的问题是此行中的“类别”不接受参数,因此不会过滤: ft.trigger({category:[buttonText]});
代码确实以其他方式工作。如果我将“category”替换为“genre”或“number”这个词,它会按照它应该进行过滤。它还在console.log()中记录了正确的单词。当我调试它时,它显示“类别”被替换为“数字”或“流派”。它显然接受变量,因为它读取“buttonText”就好了。我得不到什么?为什么不注册该特定参数?我该如何解决这个问题?
您可以在此处查看我的问题:http://jsfiddle.net/fletchling/JLN6J/10/
你可以看到我从下面开始的地方以及我是如何进行的:
$(function () {
var post = $('ul#filtrifyContainer').find('li'),
ft = $.filtrify("filtrifyContainer", "placeHolder"),
data = $(post).data(),
genre = $(post).data("genre"),
number = $(post).data("number");
var Filter = function(category){
$(post).each(function () {
var attribute = $(this).data(category);
$(this).append('<a class="button small ' + category + '">' + attribute.split(',').join('</a><a class="button small ' + category + '">') + '</a>');
$('a.button').click(function () {
var buttonText = $(this).text();
ft.trigger({category: [buttonText]});
console.log(category);
});
});
};
if(genre)Filter('genre')
if(number)Filter('number')
});
我的问题是,当我在console.log中它是什么类别时它会写出“流派”和“数字”。但是,在此之前它只记录第一个。为什么现在这样做?我相信这是阻止它工作的唯一因素,也是我的最后一个问题。
一直滚动到javascript面板的底部,查看我的代码。
与往常一样,非常感谢任何帮助。
修改
我修复了重复属性,点击时点击:
$('a.button').click(function (e) {
e.stopImmediatePropagation();
var buttonText = $(this).text();
ft.trigger({category: [buttonText]});
console.log(category);
});
当我调试代码时,看起来它已成功进入此行的类别:
ft.trigger({category: [buttonText]});
编辑2: 修正了几个愚蠢的错误。在e.stopImmediatePropogation之前创建了var buttonText并添加了trim函数:
$('a.button').click(function (e) {
e.stopImmediatePropagation();
var buttonText = $.trim($(this).text());
console.log(category);
console.log(buttonText);
ft.trigger({category: [buttonText]});
});