Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找相关类jQuery_Jquery_Variables_Target - Fatal编程技术网

查找相关类jQuery

查找相关类jQuery,jquery,variables,target,Jquery,Variables,Target,我有四个链接,在主导航内部,需要激活相应的slideDown元素。链接有单独的父类,.patient>a、.doctor>a、.primary>a和.locations>a 当有人点击.patient>a时,我需要ul.patient成为目标ul 我在做实验,但到目前为止我已经做到了: var $patientDrop = $('ul.patient'); $patientDrop.hide(); $('.patient > a').click(function() { if ($p

我有四个链接,在主导航内部,需要激活相应的slideDown元素。链接有单独的父类,
.patient>a
.doctor>a
.primary>a
.locations>a

当有人点击
.patient>a
时,我需要ul.patient成为目标ul

我在做实验,但到目前为止我已经做到了:

var $patientDrop = $('ul.patient');

$patientDrop.hide();
$('.patient > a').click(function() {
  if ($patientDrop.is(':visible')) {
      $patientDrop.slideUp(function() {
        $('.patient > a').removeClass('active');
      });
  }
  else {
    $patientDrop.slideUp(function() {
        $('.patient > a').removeClass('active');
    });
    $patientDrop.slideDown();
    $('.patient > a').addClass('active');
  }
});
$('body').click(function(event) {
if (!$(event.target).is('a')) {
  $patientDrop.slideUp(function() {
        $('.patient > a').removeClass('active');
  });
}
});
现在,我使用变量只是为了学习,也许它们是这里需要的。但我真正的问题是,如何以最有效的方式进行。我不想用不同的变量重复所有这些代码四次,只是为了让它与每四个链接及其对应的UL一起工作

他们有没有办法,比如说:
主导航a,获取点击a的类,用这个类找到ul,然后运行脚本的其余部分


jsidle:

如果需要访问父ul,那么可以使用jquery的父方法

$('.doctor  a').parent('ul') 

将以父ul为目标。

假设锚不在您要展开的
ul.patient
内,我将使用
rel
属性或类似属性来了解您的目标是什么。jQueryUI在其数据目标中经常这样做。有关示例,请参见我更新的JSFIDLE:

编辑:根据新的请求/需求更新JSFIDLE脚本

我还添加了一些ID,使目标更容易确定。我将ID用于“静态”元素——也就是说,它们具有真正的意义,而不仅仅用于普通样式

变化的实质是:

    $(document).ready(function () {
  $('#primary-nav li').click(function()
                                 {
                                     var $elem = $('#sliderareas > ul.' + $(this).attr('rel'));
                                     var $this = $(this);

                                     if($elem.is(':visible'))
                                     {
                                         $elem.slideUp(function() {
                                              $this.find('a').removeClass('active');
                                          });
                                     }
                                     else
                                     {
                                         $elem.slideUp(function() {
                                            $this.find('a').removeClass('active');
                                          });

                                        $elem.slideDown();
                                        $this.find('a').addClass('active');
                                     }

                                 });
});
隐藏所有#slideras uls,然后显示与单击的li的
rel
类似的类。您还可以将rel放在li内的锚上,或者如果愿意,可以使用锚的href='#散列',然后单击
a
使用
href
attr查找id设置为
$(this.attr('href')
的#slideras ul。如果您需要该示例,我可以进行另一次JSFIDLE编辑。

尝试以下方法:

$("a").click(function() {
    var myClass = $(this).parent('li').attr("class");
    var $patientDrop = $('ul.' + myClass);
    alert(myClass);
    // Your code...
});

相应的HTML和演示会非常有用。我不确定我是否理解。你说的是
.patient>a
,但是没有
的孩子。我已经更新了我的JSFIDLE,也许这能澄清一点。每个顶级链接都需要打开下面的列表。不幸的是,ul不是ul.primary-nav的孩子。它工作得很好,但一旦我把它转换成我自己的代码,它就坏了。你能给我一些指导吗?被改进的。请参阅新的JSFIDLE进行扩展,以便更紧密地匹配您的示例。现在,每个下拉菜单都独立运行,因此如果需要,您可以同时展开所有下拉菜单(类似于设置的工作方式)。每次单击都会切换相应“companion”部分的扩展状态。我已经更新了代码,而且一切都很好:除了,当一个打开的元素被激活时,是否可以将所有其他打开的元素向上滑动?我认为我的脚本已经做到了这一点,但显然,正如您在JSFIDLE中看到的,它没有做到。我的原始脚本做到了这一点。我以为你想让他们继续扩张。有关更新的脚本(包括正文单击),请参见。更新我的答案是否有一种方法可以让它在四个下拉列表中工作?更新JSIDLE: