Filtering Data

by Dan

HTML

<div class="status"></div>
<div id="filterDiv">
  <input type="text" class="myInput" id="0"/>

  <select class="mySel" id="1">
    <option value="">All</option>
    <option value="a">A</option>
    <option value="b">B</option>
    <option value="c">C</option>
  </select>

  <select class="mySel" id="2">
    <option value="">All</option>
    <option value="123">123</option>
    <option value="231">231</option>
    <option value="321">321</option>
  </select>

  <input type="checkbox" id="3"> Test Data :: 1 | 0 | NULL
</div>
<p class="p a 123" data-name="apple" data-a="a" data-b="123" data-test="1">Apple A 123 1</p>
<p class="p b 123" data-name="banana" data-a="b" data-b="123" data-test="0">Banana B 123 0</p>
<p class="p c 321" data-name="cherry" data-a="c" data-b="321" data-test="">Cherry C 321 X</p>
<p class="p a 321" data-name="date" data-a="a" data-b="321" data-test=""> Date A 321 X</p>
<p class="p a 123" data-name="elderberry" data-a="a" data-b="123" data-test="1">Elderberry A 123 0</p>
<p class="p c 231" data-name="fig" data-a="c" data-b="231" data-test="1">Fig C 231 0</p>

CSS

.mySel {
  width: 100px;
  padding: 10px;
}
.myInput {
  width: 150px;
  padding: 10px;
  margin-bottom: 5px;
}

p {
  padding: 30px;
  background-color: #ffb3b3;
  color: white;
  font-weight: 700;
}

.a {
  border: 4px solid blue;
}

.b {
  border: 4px solid #e5e600
}

.c {
  border: 4px solid #00b36b
}

JavaScript

$('#filterDiv').on("change keyup", function() {
  chkBox = { datatest: null };
  
  if ($('#3').is(':checked')) { chkBox.datatest = "1"; } else { chkBox.datatest = ""; }
  
  $("p").hide().filter(function() {
    var rtnData = "";

    regExName 	= new RegExp($('#0').val().trim(), "ig");
    regExA 			= new RegExp($('#1').val().trim(), "ig");
    regExB 			= new RegExp($('#2').val().trim(), "ig");
    regExTest		= new RegExp(chkBox.datatest, "ig")
    
		rtnData = (
      $(this).attr("data-name").match(regExName) && 
      $(this).attr("data-a").match(regExA) && 
      $(this).attr("data-b").match(regExB) &&
      $(this).attr("data-test").match(regExTest)
    );
     
    //console.log(rtnData);
    return rtnData;
  }).show();
});