jQuery onclick 显示/隐藏多个div
jQuery onclick show / hide multiple divs
我正在尝试学习一些东西 jQuery,但显然我没有从上一个问题和得到的答案中学到任何东西,因为我无法弄清楚如何执行以下操作:
https://jsfiddle.net/9eofcw7w/
是的,它可以工作,但是像这样的代码只是马虎而且不专业:
$('#tab1').click(function () {
$('#tab2show').hide();
$('#tab3show').hide();
$('#tab4show').hide();
$('#tab5show').hide();
$('#tab1show').show();
});
我如何只用几行 jQuery 而不是我现在拥有的东西来制作上面的代码?
您可以采用以下一种方法:
首先在您单击的 div 上添加一个环绕 div。这将使添加事件处理程序变得更加容易:
<div id="clicks">
<div id="tab1">Test 1</div>
<div id="tab2">Test 2</div>
<div id="tab3">Test 3</div>
<div id="tab4">Test 4</div>
<div id="tab5">Test 5</div>
</div>
然后用另一个 div 包裹您正在显示/隐藏的所有 div。这将使显示/隐藏所有 divs:
变得更容易
<div id="tabShows">
<div id="tab1show">test 1 default = show</div>
<div id="tab2show">test 2</div>
<div id="tab3show">test 3</div>
<div id="tab4show">test 4</div>
<div id="tab5show">test 5</div>
</div>
然后使用这个事件处理器:
// when user click on any div inside div 'clicks'
$('#clicks').on('click', 'div', function(event){
// Get the id of a div that was clicked, e.g. tab1
var tabId = $(this).attr('id');
// Hide all divs inside div 'tabShows'
$('#tabShows div').hide();
// Show only div that was clicked, e.g. tab1show
$('#' + tabId + 'show').show();
});
这里是 link 更新 jsFiddle
<div id="tab1" class="ta">Test 1</div>
<div id="tab2" class="ta">Test 2</div>
<div id="tab3" class="ta">Test 3</div>
<div id="tab4" class="ta">Test 4</div>
<div id="tab5" class="ta">Test 5</div>
<br /><br />
<div id="tab1show" class="tab">
test 1 default = show
</div>
<div id="tab2show" class="tab">
test 2
</div>
<div id="tab3show" class="tab">
test 3
</div>
<div id="tab4show" class="tab">
test 4
</div>
<div id="tab5show" class="tab">
test 5
</div>
$('#tab2show').hide();
$('#tab3show').hide();
$('#tab4show').hide();
$('#tab5show').hide();
$('.ta').click(function () {
$('.tab').hide();
$("#"+$(this).attr("id")+"show").show();
});
您的代码的问题是您为每个元素重复相同的代码块,相反您可以使用一些公共属性来减少单独的处理程序,例如
首先我们向所有选项卡元素添加一个公共 class,如 tab
,然后将另一个 class tab-content
添加到所有内容元素,这将有所帮助我们很容易 select 这些元素。
那么我们要找的逻辑就是,只需要显示id和点击的tab匹配的content
(内容的id是<clicked tab id> + 'show'
)。
现在我们可以有一个单击处理程序,它将以所有 tab
元素为目标,在其中我们将其 id 与 'show'
连接起来以查找要显示的内容并通过 [= 显示它18=] 然后我们隐藏所有其他 tab-content
元素。
另请注意,我们可以为 tab-content
缓存 jQuery 对象供以后使用。
var $contents = $('.tab-content');
$contents.slice(1).hide();
$('.tab').click(function() {
var $target = $('#' + this.id + 'show').show();
$contents.not($target).hide();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="tab1" class="tab">Test 1</div>
<div id="tab2" class="tab">Test 2</div>
<div id="tab3" class="tab">Test 3</div>
<div id="tab4" class="tab">Test 4</div>
<div id="tab5" class="tab">Test 5</div>
<br />
<br />
<div id="tab1show" class="tab-content">
test 1 default = show
</div>
<div id="tab2show" class="tab-content">
test 2
</div>
<div id="tab3show" class="tab-content">
test 3
</div>
<div id="tab4show" class="tab-content">
test 4
</div>
<div id="tab5show" class="tab-content">
test 5
</div>
对于上述所有答案,我在使用这些答案时会重新加载页面,因此请使用上述已接受答案的 jquery 代码来防止默认和页面加载
<script>
var $contents = $('.tab-content');
$contents.slice(1).hide();
$('.tab').click(function (event, ui) {
var $target = $('#' + this.id + 'show').show();
$contents.not($target).hide();
event.preventDefault();
return false;
});
我正在尝试学习一些东西 jQuery,但显然我没有从上一个问题和得到的答案中学到任何东西,因为我无法弄清楚如何执行以下操作:
https://jsfiddle.net/9eofcw7w/
是的,它可以工作,但是像这样的代码只是马虎而且不专业:
$('#tab1').click(function () {
$('#tab2show').hide();
$('#tab3show').hide();
$('#tab4show').hide();
$('#tab5show').hide();
$('#tab1show').show();
});
我如何只用几行 jQuery 而不是我现在拥有的东西来制作上面的代码?
您可以采用以下一种方法:
首先在您单击的 div 上添加一个环绕 div。这将使添加事件处理程序变得更加容易:
<div id="clicks">
<div id="tab1">Test 1</div>
<div id="tab2">Test 2</div>
<div id="tab3">Test 3</div>
<div id="tab4">Test 4</div>
<div id="tab5">Test 5</div>
</div>
然后用另一个 div 包裹您正在显示/隐藏的所有 div。这将使显示/隐藏所有 divs:
变得更容易<div id="tabShows">
<div id="tab1show">test 1 default = show</div>
<div id="tab2show">test 2</div>
<div id="tab3show">test 3</div>
<div id="tab4show">test 4</div>
<div id="tab5show">test 5</div>
</div>
然后使用这个事件处理器:
// when user click on any div inside div 'clicks'
$('#clicks').on('click', 'div', function(event){
// Get the id of a div that was clicked, e.g. tab1
var tabId = $(this).attr('id');
// Hide all divs inside div 'tabShows'
$('#tabShows div').hide();
// Show only div that was clicked, e.g. tab1show
$('#' + tabId + 'show').show();
});
这里是 link 更新 jsFiddle
<div id="tab1" class="ta">Test 1</div>
<div id="tab2" class="ta">Test 2</div>
<div id="tab3" class="ta">Test 3</div>
<div id="tab4" class="ta">Test 4</div>
<div id="tab5" class="ta">Test 5</div>
<br /><br />
<div id="tab1show" class="tab">
test 1 default = show
</div>
<div id="tab2show" class="tab">
test 2
</div>
<div id="tab3show" class="tab">
test 3
</div>
<div id="tab4show" class="tab">
test 4
</div>
<div id="tab5show" class="tab">
test 5
</div>
$('#tab2show').hide();
$('#tab3show').hide();
$('#tab4show').hide();
$('#tab5show').hide();
$('.ta').click(function () {
$('.tab').hide();
$("#"+$(this).attr("id")+"show").show();
});
您的代码的问题是您为每个元素重复相同的代码块,相反您可以使用一些公共属性来减少单独的处理程序,例如
首先我们向所有选项卡元素添加一个公共 class,如 tab
,然后将另一个 class tab-content
添加到所有内容元素,这将有所帮助我们很容易 select 这些元素。
那么我们要找的逻辑就是,只需要显示id和点击的tab匹配的content
(内容的id是<clicked tab id> + 'show'
)。
现在我们可以有一个单击处理程序,它将以所有 tab
元素为目标,在其中我们将其 id 与 'show'
连接起来以查找要显示的内容并通过 [= 显示它18=] 然后我们隐藏所有其他 tab-content
元素。
另请注意,我们可以为 tab-content
缓存 jQuery 对象供以后使用。
var $contents = $('.tab-content');
$contents.slice(1).hide();
$('.tab').click(function() {
var $target = $('#' + this.id + 'show').show();
$contents.not($target).hide();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="tab1" class="tab">Test 1</div>
<div id="tab2" class="tab">Test 2</div>
<div id="tab3" class="tab">Test 3</div>
<div id="tab4" class="tab">Test 4</div>
<div id="tab5" class="tab">Test 5</div>
<br />
<br />
<div id="tab1show" class="tab-content">
test 1 default = show
</div>
<div id="tab2show" class="tab-content">
test 2
</div>
<div id="tab3show" class="tab-content">
test 3
</div>
<div id="tab4show" class="tab-content">
test 4
</div>
<div id="tab5show" class="tab-content">
test 5
</div>
对于上述所有答案,我在使用这些答案时会重新加载页面,因此请使用上述已接受答案的 jquery 代码来防止默认和页面加载
<script>
var $contents = $('.tab-content');
$contents.slice(1).hide();
$('.tab').click(function (event, ui) {
var $target = $('#' + this.id + 'show').show();
$contents.not($target).hide();
event.preventDefault();
return false;
});