2015-09-11 174 views
2

也许这是不可能的,但是,我有一个50周独特的div像这样:多个div隐藏显示的jQuery

<div id="nyc_data"> 
<a href="#nyc_pics" class="hidden">nyc</a> 
</div> 

<div id="la_data"> 
<a href="#la_pics" class="hidden">la</a> 
</div> 

<div id="san_data"> 
<a href="#san_pics" class="hidden">san</a> 
</div> 

等....

下面

是我的jquery:

jQuery(document).ready(function() 
{ 
    var url=document.URL.split('#')[1]; 
    url=url.toLowerCase(); 
    if (url == "nyc_pics") 
    { 
    jQuery("#nyc_data").show(); 
    jQuery("#la_data, #san_data").hide(); 
    } 

    if (url == "la_pics") 
    { 
    jQuery("#la_data").show(); 
    jQuery("#nyc_data, #san_data").hide(); 
    } 

    if() 
    { 
    } 
    etc.... 
} 

当这是2时,可以写出来,但我不可能为每个城市写50次长的jquery。有没有一个有效的方法来有一个简单的小jQuery代码?

+0

的jQuery(DIV [ID $ = “_数据”])显示()应该工作为它选择曾经在 “_data” 结束ID核实。 –

+0

@KevinHufnagl将其作为答案。 –

回答

0

选择所有的div首先,作为[id$='_data'] jQuery选择ID与 '_data' 结尾,并隐藏他们都。这也会隐藏你想要的div。

现在从url中获得想要的div id,用jQuery找到并显示。

如果你的URI是mySite.com/myPage#nyc_pics那么var urlHash = document.URL.split('#')[1]会得到“nyc_pics”。在toLowercase().replace("pics", "data")之后,这将是“nyc_data”。现在,jQuery("#" + divToSHow)$("#nyc_data"),这将匹配您的分区。然后你就可以显示出与.show),其单格(

jQuery(document).ready(function() 
{ 
    var urlHash = document.URL.split('#')[1]; 
    var divToSHow = urlHash .toLowerCase().replace("pics", "data"); 
    jQuery("div[id$='_data']").hide(); 
    jQuery("#" + divToSHow).show(); 
}); 
+0

我明白_data,但是,你如何区分网址?它也隐藏了所有的div。当我点击la_pics时,我变得空白。 – NULL

+0

@Menew啊,我的坏。错过了string.replace位。更新了脚本。 –

+1

优秀作品! – NULL

0

你可以使用这个CSS选择器:

jQuery('div[id$="_data"]').show(); 

在您的例子:

jQuery(document).ready(function() 
{ 
    var url=document.URL.split('#')[1]; 
    url=url.toLowerCase(); 
    var currentId = '#' + url.split('_')[0] + "_data"; 
    jQuery('div[id$="_data"]').hide(); 
    jQuery(currentId).show(); 
} 
+0

我试过这个,当我点击一个网址时,它隐藏了我所有的divs。 – NULL

+0

@Menew试试这个jQuery('div [id $ =“_ data”]:not(currentId)')。hide();相反,并检查currentId是否是您要显示的div的正确ID,因为我没有测试过代码。 –

-1

这将是更容易/清洁/更快,如果你只是使用jQuery的切换父元素的一类,让CSS做的工作。事情是这样的:

window.onload = function() { 
 
    $('#all-the-things-btn').on('click', function() { 
 
    $('#my-parent-div').toggleClass('show-things'); 
 
    }); 
 
};
#my-parent-div > div { 
 
    display: none; 
 
} 
 

 
#my-parent-div.show-things > div { 
 
    display: block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<a href="#" id="all-the-things-btn">Toggle all the things!</a> 
 

 
<div id="my-parent-div" class="show-things"> 
 
    <div id="1">stuff</div> 
 
    <div id="2">more stuff</div> 
 
    <div id="3">even more stuff</div> 
 
</div>

+0

我在城市中使用了一个漂亮的方块,所以第一个答案完美无缺。虽然 – NULL

+1

我知道它的作品。当你不需要的时候严重依赖javascript是不是一个好主意。如果你要隐藏/显示大量的div,CSS方法可以立即工作,并且比jQuery通过强力方式遍历它们更快。 – EricL