JSFiddle - React, Tailwind, and code Playground
Chat data Attributes Filtering
by Jennifer Perrin
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.js"></script>
<div class="container-chat">
<div class="fg-row">
<div class="fg-xs-3 border-right">
<h5 class="mt-0 mb-20">Select a User to message:</h5>
<div id="userStats" class="list-group">
<ul>
<li><label class="crb crb_radio">User 1<input type="radio" name="toUser" id="user1" value="user1" /></label></li>
<li><label class="crb crb_radio">User 2<input type="radio" name="toUser" id="user2" value="user2" /></label></li>
<li><label class="crb crb_radio">User 3 - You are this User</label></li>
</ul>
</div>
</div>
<div class="fg-xs-9 no-padding chat-background">
<div id="chatbox" class="chat">
<div id="chatWrapper" class="chat-wrapper">
<div class="message-box-holder" data-chat-info='{"from" : "user3", "to": "user1"}'>
<div class="message-box">3 to 1</div>
<div class="message-user"> <small class="text-muted messageTime">06-Jul-2017 11:12 AM</small> User 3
<br> <small class="text-muted">sent to </small><span class="sentTo">User 1</span> </div>
</div>
<div class="message-box-holder" data-chat-info='{"from" : "user1", "to" : "user3"}'>
<div class="message-sender">User 1 <small class="text-muted messageUserTime">on 06-Jul-2017 11:13 AM</small></div>
<div class="message-box message-partner">From 1 to 3. </div>
</div>
<div class="message-box-holder" data-chat-info='{"from" : "user3", "to" : "user2"}'>
<div class="message-box">3 to 2 </div>
<div class="message-user"> <small class="text-muted messageTime">06-Jul-2017 11:14 AM</small> User 3
<br> <small class="text-muted">sent to </small><span class="sentTo">User 2</span> </div>
</div>
</div>
</div>
<div class="form-group">
<textarea id="txtMessage" class="form-control" rows="3" spellcheck="true"...
CSS
body {
font-family: 'Muli', sans-serif;
background-color: #ebeff2;
margin: 0;
}
/* ==========================================================================
Layout
========================================================================== */
.container-chat {
width: 820px;
margin: 0 auto;
}
.fg-row {
height: 600px;
margin-bottom: 0;
}
.fg-xs-4 {
background: #f2f2f2;
}
.border-right { border-right: 2px solid #dedede; }
.chat-background { background: #e6f5fb; }
/* ==========================================================================
Chat Messages
========================================================================== */
.chat {
background: #ffffff;
height: 540px;
overflow: auto;
padding: 10px;
}
#chat-messages {
height: 546px;
padding: 10px;
overflow: auto;
display: flex;
flex-flow: row wrap;
align-content: flex-start;
flex: 1;
}
.chat-wrapper {
min-width: 350px;
width: 100%;
display: table;
overflow: hidden;
margin-bottom: 10px;
}
.chat-wrapper:before {
content: " ";
display: block;
}
.message-box-holder {
width: 100%;
margin: 0 0 15px;
display: flex;
flex-flow: column;
align-items: flex-end;
}
.message-sender {
font-size: 14px;
margin: 0 0 15px;
color: #30649c;
align-self: flex-start;
}
.message-user {
font-size: 13px;
margin: 15px 0 0;
color: #30649c;
align-self: flex-end;
}
.sentTo { color: #3bafda; }
.form-group { margin-bottom: 0; }
.form-control {
border: 0;
border-top: 2px solid #eeeeee;
}
.message-box {
padding: 6px 10px;
border-radius: 6px 0 6px 0 !important;
position: relative;
background: #ffffff;
border: 2px solid #d1e1c3;
color: #454e59;
font-size: 14px;
max-width: 580px !important;
}
.message-box:after {
content: "";
position: absolute;
border: 10px solid transparent;
border-top: 10px solid #d1e1c3;
border-right: none;
bottom: -22px;
right: 10px;
}
.message-partner {
background: #ffffff;
border: 2px solid #c3deef;
align-self:...
JavaScript
$(".container-chat").on( "click", "#userStats input", function(){
var sel = $(this).val();
$(".message-box-holder", "#chatWrapper").hide();
console.log( sel );
var $data = $(".message-box-holder", "#chatWrapper").filter( function() {
return ( $(this).data("chat-info").from == sel || $(this).data("chat-info").to == sel )
} );
console.log( $data );
$data.show();
});