不能在委托事件处理程序中 select 第二个动态 div
Can not select second dynamic div inside a delegate event handler
我想在单击 chat-tab
时更改 class 活动选项卡和房间。希望将未点击的room
中的hidden
class去掉,同时添加到不相关的div中。
问题是,无论我怎样尝试,我都无法让房间选择器正常工作。
$('.chat-container').on('click', '.chat-tab', (function() {
activeTab = $('body').data('activeTab');
//working fine
$('.chat-tab').removeClass("active");
$('.chat-tab[data-tab="' + activeTab + '"]').addClass("active");
var newActiveTab = $(this).attr("data-tab");
$('body').data('activeTab', newActiveTab);
//Do not work
$('.rooms div[id!=' + newActiveTab + '_room]').addClass("hidden");
$('.rooms div[id=' + newActiveTab + '_room]').removeClass("hidden");
}));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="chat-container">
<!--dynamic tabs-->
<ul class="nav nav-tabs" id="chat-bar">
<li class="chat-tab room-tab active" data-tab="Public"><a data-toggle="pill">Public</a></li>
<li class="chat-tab" data-tab="Sports"><a data-toggle="pill">Sports</a></li>
</ul>
<!--/tabs-->
<!--dynamic rooms-->
<div class="rooms">
<div id="Public_room" class="room hidden">
<ol id="Public_msgOl" >
<li>dodo : Hi Pubilc</li>
</ol>
</div>
<div id="Sports_room" class="room hidden">
<ol id="Sports_msgOl" >
<li>dodo : Whats up sportsmen?</li>
</ol>
</div>
</div>
<!--/rooms-->
</div>
我不确定这是否适用于您的情况,但查找 activeTab 的名称对我来说并不奏效。然而,真正的问题是您的聊天室选择器。查询 id 时,必须用引号将值括起来,例如 [id="value"]
.
$('.chat-container').on('click', '.chat-tab', function() {
activeTab = $("ul .active").attr("data-tab");
//working fine
$('.chat-tab').removeClass("active");
$('.chat-tab[data-tab="' + activeTab + '"]').addClass("active");
var newActiveTab = $("ul .active").attr("data-tab");
$('body').data('activeTab', newActiveTab);
//Do work now
$(".rooms div[id!='" + newActiveTab + "_room']").addClass("hidden");
$(".rooms div[id='" + newActiveTab + "_room']").removeClass("hidden");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="chat-container">
<!--dynamic tabs-->
<ul class="nav nav-tabs" id="chat-bar">
<li class="chat-tab room-tab active" data-tab="Public"><a data-toggle="pill">Public</a></li>
<li class="chat-tab" data-tab="Sports"><a data-toggle="pill">Sports</a></li>
</ul>
<!--/tabs-->
<!--dynamic rooms-->
<div class="rooms">
<div id="Public_room" class="room hidden" data-pane="Public">
<ol id="Public_msgOl" class="chat__messages">
<li><strong class="msg">dodo : </strong>Hi there!</li>
</ol>
</div>
<div id="Sports_room" class="room" data-pane="Sports">
<ol id="Public_msgOl" class="chat__messages">
<li><strong class="msg">dodo : </strong>Whats up?</li>
</ol>
</div>
</div>
<!--/rooms-->
</div>
我想在单击 chat-tab
时更改 class 活动选项卡和房间。希望将未点击的room
中的hidden
class去掉,同时添加到不相关的div中。
问题是,无论我怎样尝试,我都无法让房间选择器正常工作。
$('.chat-container').on('click', '.chat-tab', (function() {
activeTab = $('body').data('activeTab');
//working fine
$('.chat-tab').removeClass("active");
$('.chat-tab[data-tab="' + activeTab + '"]').addClass("active");
var newActiveTab = $(this).attr("data-tab");
$('body').data('activeTab', newActiveTab);
//Do not work
$('.rooms div[id!=' + newActiveTab + '_room]').addClass("hidden");
$('.rooms div[id=' + newActiveTab + '_room]').removeClass("hidden");
}));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="chat-container">
<!--dynamic tabs-->
<ul class="nav nav-tabs" id="chat-bar">
<li class="chat-tab room-tab active" data-tab="Public"><a data-toggle="pill">Public</a></li>
<li class="chat-tab" data-tab="Sports"><a data-toggle="pill">Sports</a></li>
</ul>
<!--/tabs-->
<!--dynamic rooms-->
<div class="rooms">
<div id="Public_room" class="room hidden">
<ol id="Public_msgOl" >
<li>dodo : Hi Pubilc</li>
</ol>
</div>
<div id="Sports_room" class="room hidden">
<ol id="Sports_msgOl" >
<li>dodo : Whats up sportsmen?</li>
</ol>
</div>
</div>
<!--/rooms-->
</div>
我不确定这是否适用于您的情况,但查找 activeTab 的名称对我来说并不奏效。然而,真正的问题是您的聊天室选择器。查询 id 时,必须用引号将值括起来,例如 [id="value"]
.
$('.chat-container').on('click', '.chat-tab', function() {
activeTab = $("ul .active").attr("data-tab");
//working fine
$('.chat-tab').removeClass("active");
$('.chat-tab[data-tab="' + activeTab + '"]').addClass("active");
var newActiveTab = $("ul .active").attr("data-tab");
$('body').data('activeTab', newActiveTab);
//Do work now
$(".rooms div[id!='" + newActiveTab + "_room']").addClass("hidden");
$(".rooms div[id='" + newActiveTab + "_room']").removeClass("hidden");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="chat-container">
<!--dynamic tabs-->
<ul class="nav nav-tabs" id="chat-bar">
<li class="chat-tab room-tab active" data-tab="Public"><a data-toggle="pill">Public</a></li>
<li class="chat-tab" data-tab="Sports"><a data-toggle="pill">Sports</a></li>
</ul>
<!--/tabs-->
<!--dynamic rooms-->
<div class="rooms">
<div id="Public_room" class="room hidden" data-pane="Public">
<ol id="Public_msgOl" class="chat__messages">
<li><strong class="msg">dodo : </strong>Hi there!</li>
</ol>
</div>
<div id="Sports_room" class="room" data-pane="Sports">
<ol id="Public_msgOl" class="chat__messages">
<li><strong class="msg">dodo : </strong>Whats up?</li>
</ol>
</div>
</div>
<!--/rooms-->
</div>