Javascript jquery:n第n种行为古怪的类型

Javascript jquery:n第n种行为古怪的类型,javascript,jquery,html,Javascript,Jquery,Html,我正在使用jquerynth类型使div上下滑动(slideToggle()和click())。问题是,当我尝试单击其中一项打开选项卡时,它们不会打开 HTML: 伪类只关注元素类型。“tab”元素都不是其容器中的第一个、第二个或第三个,因此都与选择器不匹配 我认为,你可以这样做: $('.op:nth-of-type(3n+1)').click(function(){ $('.tab:nth-of-type(3n+1)').slideToggle(); }); 当然,在添加/删除选项

我正在使用jquery
nth类型
使div上下滑动(
slideToggle()
click()
)。问题是,当我尝试单击其中一项打开选项卡时,它们不会打开

HTML:

伪类只关注元素类型。“tab”元素都不是其容器中的第一个、第二个或第三个
,因此都与选择器不匹配

我认为,你可以这样做:

$('.op:nth-of-type(3n+1)').click(function(){
    $('.tab:nth-of-type(3n+1)').slideToggle();
});
当然,在添加/删除选项卡时,您必须确保
3
已更新

或者,您可以这样做:

$(".op").click(function() {
  $(".tab").eq($(this).index()).slideToggle();
});
然后您只需要设置一个处理程序。

伪类只关注元素类型。“tab”元素都不是其容器中的第一个、第二个或第三个
,因此都与选择器不匹配

我认为,你可以这样做:

$('.op:nth-of-type(3n+1)').click(function(){
    $('.tab:nth-of-type(3n+1)').slideToggle();
});
当然,在添加/删除选项卡时,您必须确保
3
已更新

或者,您可以这样做:

$(".op").click(function() {
  $(".tab").eq($(this).index()).slideToggle();
});

然后您只需要设置一个处理程序。

用一个示例来完成Pointy的回答:

$('.tab').hide();
$('.op:nth-of-type(1)').click(function(){
  $('div:nth-of-type(4)').slideToggle();
});
$('.op:nth-of-type(2)').click(function(){
  $('div:nth-of-type(5)').slideToggle();
});
$('.op:nth-of-type(3)').click(function(){
   $('div:nth-of-type(6)').slideToggle();
});

用一个例子来完成Pointy的回答:

$('.tab').hide();
$('.op:nth-of-type(1)').click(function(){
  $('div:nth-of-type(4)').slideToggle();
});
$('.op:nth-of-type(2)').click(function(){
  $('div:nth-of-type(5)').slideToggle();
});
$('.op:nth-of-type(3)').click(function(){
   $('div:nth-of-type(6)').slideToggle();
});

您也可以使用
:eq
选择器。然后元素将按预期计数,0-2(从0开始索引)

或者很快,不取决于元素数量

$('.tab').hide();
$('.op').click(function(){
    $('.tab:eq(' + $(this).index() + ')').slideToggle();
});

您也可以使用
:eq
选择器。然后元素将按预期计数,0-2(从0开始索引)

或者很快,不取决于元素数量

$('.tab').hide();
$('.op').click(function(){
    $('.tab:eq(' + $(this).index() + ')').slideToggle();
});

您在pointy的答案中有解释,但要给目前的解决方案增加一点变化,您可以尝试以下方法:

$('.op').click(function() {
  var pos = $(this).parent().indexOf($(this));
  $('.tab').eq(pos).slideToggle();
});
这可以压缩,但我把它放在了一个更可读的形式,这样你就可以掌握它在做什么

它“显示”:“获取此单击的“op”元素在其父元素中所有其他元素中的位置。获取所有“tab”元素,并滑动切换与单击的“op”元素位置对应的选项卡元素。”


注意:这将针对您的加价中的任何
.op
.tab
元素,您可以选择使其更具体。

您在pointy的答案中有解释,但要给目前的解决方案添加一些变化,您可以尝试以下方法:

$('.op').click(function() {
  var pos = $(this).parent().indexOf($(this));
  $('.tab').eq(pos).slideToggle();
});
这可以压缩,但我把它放在了一个更可读的形式,这样你就可以掌握它在做什么

它“显示”:“获取此单击的“op”元素在其父元素中所有其他元素中的位置。获取所有“tab”元素,并滑动切换与单击的“op”元素位置对应的选项卡元素。”


注意:这将针对标记中的任何
.op
.tab
元素,您可以选择使其更具体。

类型的
第n个
选择器仅基于元素名称而非类进行区分

类型(an+b)的第n个伪类表示法表示一个元素 前有一个扩展元素名相同的+b-1同级 在文档树中,对于n的任何零或正整数值,以及 有一个父元素。

这里的一个替代方法是使用

尽管更优雅的解决方案是使用
jQuery.index
来选择
.tab
,该选项卡的索引与单击的
.op
相同

$('#tabs-wrapper').on('click', '.op', function(){
    var $t = $(this), $tab;
    $tab = $t.siblings('.tab').eq($t.index());
    $tab.slideToggle();
});

类型的第n个选择器仅基于元素名称而非类进行区分

类型(an+b)的第n个伪类表示法表示一个元素 前有一个扩展元素名相同的+b-1同级 在文档树中,对于n的任何零或正整数值,以及 有一个父元素。

这里的一个替代方法是使用

尽管更优雅的解决方案是使用
jQuery.index
来选择
.tab
,该选项卡的索引与单击的
.op
相同

$('#tabs-wrapper').on('click', '.op', function(){
    var $t = $(this), $tab;
    $tab = $t.siblings('.tab').eq($t.index());
    $tab.slideToggle();
});

因此,我应该使用
$(“#制表符包装器:第n个类型(1)”等等?@yak613好吧,你可以这样做,或者你可以考虑3个“op”元素的存在。就我个人而言,我倾向于在可点击元素和标签之间建立更明确的关系;关于选择器不匹配的原因,没有更多的说明了不起作用:@yak613我在答案中加入了一些其他想法;我也在处理一个示例JSFIDLE:),因此我应该使用
$('tabs wrapper:nth of type(1)')等等?@yak613好吧,你可以这样做,或者你可以考虑3个“op”元素的存在。就我个人而言,我倾向于在可点击元素和标签之间建立更明确的关系;关于选择器不匹配的原因,没有更多的说明了不起作用:@yak613我在答案中加入了一些其他想法;我也在处理一个示例JSFIDLE:)要获得匹配,请将
3
添加到每个
选项卡中。选项卡:第n个
s类型,即4、5、6(但这需要知道您有3个选项卡)要获得匹配,请将
3
添加到每个
选项卡中。选项卡:第n个
s类型,即4、5、6(但这需要知道您有3个选项卡)它正在工作,但更好的解决方案是,当我们想添加另一个选项卡时,不需要更改脚本:-)它可以工作,但更好的解决方案是,当我们想添加另一个选项卡时,不需要更改脚本:-)