我需要在点击链接时一次只显示一个元素。现在我通过再次隐藏所有内容然后切换点击的元素来作弊。这是有效的,除非我希望一切都能再次消失。没有添加“全部隐藏”按钮/链接我该怎么办?我希望能够再次点击链接,并隐藏它的内容。
编辑:Pseudo的代码会起作用,但是这里的html错误地让你相信所有链接都在一个div中。而不是追踪他们所在的位置,而是通过他们的ID来更容易地调用它们。这是我到目前为止所拥有的:
$(document).ready(function(){
//hides everything
$("#infocontent *").hide();
//now we show them by which they click on
$("#linkjoedhit").click(function(event){
$("#infocontent *").hide();
$("#infojoedhit").toggle();
return false;
});
$("#linkgarykhit").click(function(event){
$("#infocontent *").hide();
$("#infogarykhit").toggle();
return false;
});
});
和html看起来像:
<div id="theircrappycode">
<a id="linkjoedhit" href="">Joe D</a><br/>
<a id="linkgarykhit" href="">Gary K</a>
</div>
<div id="infocontent">
<p id="infojoedhit">Information about Joe D Hitting.</p>
<p id="infogarykhit">Information about Gary K Hitting.</p>
</div
这样有大约20个链接。因为我不编码实际的html,我无法控制实际的布局,这是可怕的。可以说,这是组织链接/信息的唯一方法。
答案 0 :(得分:2)
$("#linkgarykhit").click(function(){
if($("#infogarykhit").css('display') != 'none'){
$("#infogarykhit").hide();
}else{
$("#infocontent *").hide();
$("#infogarykhit").show();
}
return false;
});
我们也可以DRY这一点:
function toggleInfoContent(id){
if($('#' + id).css('display') != 'none'){
$('#' + id).hide();
}else{
$("#infocontent *").hide();
$('#' + id).show();
}
}
$("#linkgarykhit").click(function(){
toggleInfoContent('infogarykhit');
return false;
});
$("#linkbobkhit").click(function(){
toggleInfoContent('infobobkhit');
return false;
});
答案 1 :(得分:2)
如果您的标记“命名方案”准确无误,您可以通过为选择器使用RegEx并明智地使用jQuery“not”来避免大量重复代码。
您可以将一次点击事件附加到jQuery集合中,该集合应该执行您想要的操作,因此您不需要添加任何JavaScript,因为您添加了更多Jim或John,如下所示:
$(document).ready( function () {
$("#infocontent *").hide();
$("div#theircrappycode > a").click(function(event){
var toggleId = "#" + this.id.replace(/^link/,"info");
$("#infocontent *").not(toggleId).hide();
$(toggleId).toggle();
return false;
});
});
答案 2 :(得分:1)
这是一种略有不同的方法,与Pseudo Masochist的代码有一些相似之处。
$(document).ready(function(){
$("#infocontent *").hide();
$("#theircrappycode > a").click(statlink.togvis);
});
var statlink = {
visId: "",
togvis: function(){
$("#" + statlink.visId).toggle();
statlink.visId = $(this).attr("id").replace(/link/, "info");
$("#" + statlink.visId).toggle();
}
};
希望你也觉得这很有用。
答案 3 :(得分:0)
我刚开始使用jQuery
,所以我不知道这是不是很愚蠢。
function DoToggleMagic(strParagraphID) {
strDisplayed = $(strParagraphID).css("display");
$("#infocontent *").hide();
if (strDisplayed == "none")
$(strParagraphID).toggle();
}
$(document).ready(function(){
//hides everything
$("#infocontent *").hide();
//now we show them by which they click on
$("#linkjoedhit").click(function(event){
DoToggleMagic("#infojoedhit");
return false;
});
$("#linkgarykhit").click(function(event){
DoToggleMagic("#infogarykhit");
return false;
});
});