我有两个具有相同标记的自定义下拉列表。我一次只需要一次演出。现在,我可以同时打开两者。当我点击列表时,两者都应该关闭。如何通过jQuery隐藏具有相同标记的元素?
这两个列表都需要相同的标记,所以我不能使用唯一标识或其他类来实现此目的。
这里是一个链接到我的小提琴例如:http://jsfiddle.net/dg7Lc/29/
任何帮助将不胜感激,谢谢!
-D
我有两个具有相同标记的自定义下拉列表。我一次只需要一次演出。现在,我可以同时打开两者。当我点击列表时,两者都应该关闭。如何通过jQuery隐藏具有相同标记的元素?
这两个列表都需要相同的标记,所以我不能使用唯一标识或其他类来实现此目的。
这里是一个链接到我的小提琴例如:http://jsfiddle.net/dg7Lc/29/
任何帮助将不胜感激,谢谢!
-D
考虑在点击其中一个数据属性时通过jquery添加一个数据属性,如'active',然后隐藏所有具有该属性的属性。
$('.custom-select').eq(0).hide()
将隐藏的第一个。
使用.show()
而不是.hide()
显示(很明显)并将索引更改为(1)
以获得第二个。
首先想到的是,如果你可以在一个或两个方向上包围span或div,并使用它来解决“相同标记”限制。除此之外,虽然,我会建议在页面上,使用顺序 - 使用的.next()和.prev()在它们之间获得,并且像
$("div.custom-select").get(0)
或
$("div.custom-select").get(1)
选择他们从外面。
编辑:如果你可以将它们从onmouseover,onchange或whatnot这样的东西上运行,它就更容易了 - 改变的将作为“this”参数传递给函数。只需隐藏两者并显示,或者同时显示并隐藏它。
edit2:同样,一旦你有一个隐藏正确 - 呃,那个将被隐藏,并回应“隐藏”选择器。使用它们之间进行区分(和保存的区别为jQuery的变量),你去显示或隐藏任何事情之前
隐藏第一:
$('.custom-select').first().hide();
隐藏第二:
$('.custom-select').last().hide();
然后在需要的地方放置这些代码行。
基本上,关闭其他:
$('.custom-select').not(this).find('ul').slideUp('fast');
以及用于封闭外箱点击时,我用这段代码,但它是一个有点脏:
$("body").click(function(e) {
var should = true;
for($e = $(e.target); should && $e.length; $e = $e.parent()) {
should = !$e.is(".custom-select");
}
if(should) {
$('.custom-select').find('ul').slideUp('fast');
}
});
您可以将点击与文档绑定,看看是否点击了自定义选择或其外部的文档,并隐藏所有打开的列表,如下图所示:
$(document).click(function(ev){
if(!$(ev.target).is('.custom-select span')){ $('.custom-select').find('ul').slideUp('fast'); }
});
我相信OP意味着打开#2将关闭#1。 – pimvdb 2012-03-01 18:56:37
是的 - 除非他们完全不熟悉JS,否则他们应该能够找出其余的。 – 2012-03-01 18:59:05