Jquery 创建具有ID的筛选按钮,筛选具有相同ID的rel的元素
这是我的问题。我的网站上有这些过滤按钮,每个按钮都有一个名称,比如“UI、开发、数据库等” 现在,当您只需单击say“TAG_UI”按钮,然后再次单击以停用它时,此代码就可以正常工作。但是当你激活了TAG_UI,然后你也点击了TAG_数据库,发生的是“story_li”元素,但是这两个元素会出现,而这两个元素会隐藏 我真正需要做的是:Jquery 创建具有ID的筛选按钮,筛选具有相同ID的rel的元素,jquery,html,filter,Jquery,Html,Filter,这是我的问题。我的网站上有这些过滤按钮,每个按钮都有一个名称,比如“UI、开发、数据库等” 现在,当您只需单击say“TAG_UI”按钮,然后再次单击以停用它时,此代码就可以正常工作。但是当你激活了TAG_UI,然后你也点击了TAG_数据库,发生的是“story_li”元素,但是这两个元素会出现,而这两个元素会隐藏 我真正需要做的是: 当您最初单击过滤器按钮时,只有那些关联的 元素将显示,其他所有内容将隐藏 当您单击另一个过滤器按钮时,不禁用 第一个,只有这两个相关的元素显示,但一切 其他的东
- 当您最初单击过滤器按钮时,只有那些关联的 元素将显示,其他所有内容将隐藏李>
- 当您单击另一个过滤器按钮时,不禁用 第一个,只有这两个相关的元素显示,但一切 其他的东西仍然隐藏着
提前谢谢 因此,基本上,它似乎归结为关联元素,其rel属性与单击的过滤器匹配,在隐藏和显示之间切换 这应该满足第一次单击时显示的元素的条件,如果单击了第二种类型,则仅显示这两种类型 再次单击过滤器将隐藏关联的元素
$('.tags_list a').on('click', function() {
$(".story_list li[rel='" + this.id + "']".toggle();
}
查看以检查这是否是您想要的?因此,基本上它似乎归结为关联元素,其rel属性与单击的过滤器匹配,在隐藏和显示之间切换 这应该满足第一次单击时显示的元素的条件,如果单击了第二种类型,则仅显示这两种类型 再次单击过滤器将隐藏关联的元素
$('.tags_list a').on('click', function() {
$(".story_list li[rel='" + this.id + "']".toggle();
}
查看以检查这是否是您想要的?设计的问题是,您试图用相同的逻辑处理多种类型的状态转换。根据所选按钮集的不同,您有不同的行为:
- 如果未选择“全部”,则过滤器将停用,并显示所有项目
- 如果选择了一个或多个项目,则会激活过滤器并仅显示这些项目
on click:
figure out the new state for the currently clicked button
if enabling this button:
check the previous state for all buttons
if all buttons were unselected:
hide all but the currently selected choice
exit function
show the filtered items
exit function
else (disabling this button):
check the new state for all buttons
if all buttons will now be unselected:
show all but the previously selected choice
exit function
hide the filtered items
exit function
您可以使用或
addClass
和removeClass
方法在按钮本身上存储当前的“isSelected”状态。设计的问题是,您试图用相同的逻辑处理多种类型的状态转换。根据所选按钮集的不同,您有不同的行为:
- 如果未选择“全部”,则过滤器将停用,并显示所有项目
- 如果选择了一个或多个项目,则会激活过滤器并仅显示这些项目
on click:
figure out the new state for the currently clicked button
if enabling this button:
check the previous state for all buttons
if all buttons were unselected:
hide all but the currently selected choice
exit function
show the filtered items
exit function
else (disabling this button):
check the new state for all buttons
if all buttons will now be unselected:
show all but the previously selected choice
exit function
hide the filtered items
exit function
您可以使用或
addClass
和removeClass
方法在按钮本身上存储当前的“isSelected”状态。初始化一个全局变量,该变量跟踪按钮是否已被单击,如下所示:
var buttonClicked = false;
$(".tags_list li a").on('click',function() {
var relid = this.id;
if(!buttonClicked) {
$(".story_list li").hide();
buttonClicked = true;
}
$(".story_list li[rel='" + relid + "']").toggle('fast');
return false;
});
然后,在回调中,用classstory\u列表隐藏元素中的每个元素,并跟踪现在已单击的按钮,如下所示:
var buttonClicked = false;
$(".tags_list li a").on('click',function() {
var relid = this.id;
if(!buttonClicked) {
$(".story_list li").hide();
buttonClicked = true;
}
$(".story_list li[rel='" + relid + "']").toggle('fast');
return false;
});
初始化一个全局变量,该变量跟踪按钮是否已被单击,如下所示:
var buttonClicked = false;
$(".tags_list li a").on('click',function() {
var relid = this.id;
if(!buttonClicked) {
$(".story_list li").hide();
buttonClicked = true;
}
$(".story_list li[rel='" + relid + "']").toggle('fast');
return false;
});
然后,在回调中,用classstory\u列表隐藏元素中的每个元素,并跟踪现在已单击的按钮,如下所示:
var buttonClicked = false;
$(".tags_list li a").on('click',function() {
var relid = this.id;
if(!buttonClicked) {
$(".story_list li").hide();
buttonClicked = true;
}
$(".story_list li[rel='" + relid + "']").toggle('fast');
return false;
});
在选择和取消选择内容的同时添加一些类将对您有很大帮助,并使您可以对内容进行样式化
像这样的方法应该会奏效:
var list = $(".story_list li");
$(".tags_list li a").on('click',function( event ) {
event.preventDefault();
var relid = this.id,
that = $( this );
if ( that.is(".selected") ) {
that.removeClass( "selected" );
list.filter("[rel='" + relid + "']").removeClass("selected").hide("fast");
} else {
list.filter(":not(.selected)[rel!='" + relid + "']")
.removeClass("selected").hide("fast");
list.filter("[rel='" + relid + "']")
.addClass("selected").show("fast");
that.addClass( "selected" );
}
// If nothing selected show everything
if ( !list.filter(".selected").length ){
list.show("fast");
}
});
示例:在选择和取消选择内容的同时添加一些类将帮助您解决很多问题,并使您能够对内容进行样式化
像这样的方法应该会奏效:
var list = $(".story_list li");
$(".tags_list li a").on('click',function( event ) {
event.preventDefault();
var relid = this.id,
that = $( this );
if ( that.is(".selected") ) {
that.removeClass( "selected" );
list.filter("[rel='" + relid + "']").removeClass("selected").hide("fast");
} else {
list.filter(":not(.selected)[rel!='" + relid + "']")
.removeClass("selected").hide("fast");
list.filter("[rel='" + relid + "']")
.addClass("selected").show("fast");
that.addClass( "selected" );
}
// If nothing selected show everything
if ( !list.filter(".selected").length ){
list.show("fast");
}
});
示例:这里缺少一些东西。显示的代码在哪里?您的代码只执行一个.hide()
,但您说再次单击同一元素可以切换相关的故事列表
元素。但是当您激活了标记界面,然后您也单击了标记数据库,会出现“故事”元素,但这两个元素会出现,那两个会隐藏起来。
你能不能修正/澄清这句话的最后一部分?啊,废话。实际上,它应该是切换的。我搞砸了。很抱歉我将进行编辑。
元素没有rel
属性,对于那些确实存在该属性的元素,它不采用另一个属性的id。如果你想为JS创建你自己的属性,那么就使用HTML5的data-*
属性,不要滥用有定义意义的东西。这里缺少一些东西。显示的代码在哪里?您的代码只执行一个.hide()
,但您说再次单击同一元素可以切换相关的故事列表
元素。但是当您激活了标记界面,然后您也单击了标记数据库,会出现“故事”元素,但这两个元素会出现,那两个会隐藏起来。
你能不能修正/澄清这句话的最后一部分?啊,废话。实际上,它应该是切换的。我搞砸了。很抱歉我将进行编辑。
元素没有rel
属性,对于那些确实存在该属性的元素,它不采用另一个属性的id。如果你想为JS创建自己的属性,那么就使用HTML5的data-*
属性,不要滥用具有定义意义的东西。这实际上是我已经拥有的。