Home > Blockchain >  jQuery HTML Singular / Plural Text based on select multiple
jQuery HTML Singular / Plural Text based on select multiple

Time:05-17

I'm trying to get the singular/plural for the text before the array, based on how many options are selected in the array.

For example, if only one selected option, it should be Result in Category 1
if two or more are selected: Results in Category 1, Category 2, and Category 3

Working demo: https://jsfiddle.net/baidoct/xnjf9b0t/12/

$("#selectKat").change(function () {
  var ausbildungKatList = [];

  $.each($("#selectKat option:selected"), function () {
    ausbildungKatList.push($(this).val());
  });


   $('.asg-heading .dynamicKat').html("Result in "   humanLang(ausbildungKatList));

});

What's the best and elegant way to approach this?

CodePudding user response:

You can use Template literals (Template strings)

All I have changed is the following line from:

$('.asg-heading .dynamicKat').html("Result in "   humanLang(ausbildungKatList));

to

$('.asg-heading .dynamicKat').html(`Result${ausbildungKatList.length > 1 ? 's': ''} in ${humanLang(ausbildungKatList)}`);

If using template literals you can use variables like so ${variableName} or in this case a short if/else.

function humanLang(arr) {
  if (arr.length <= 0) return '';
  if (arr.length === 1) return arr[0];
  const firsts = arr.slice(0, arr.length - 1);
  const last = arr[arr.length - 1];
  return firsts.join(', ')   ' and '   last;
}

// Update Title
$("#selectKat").change(function () {
  var ausbildungKatList = [];

  $.each($("#selectKat option:selected"), function () {
    ausbildungKatList.push($(this).val());
  });

   $('.asg-heading .dynamicKat').html(`Result${ausbildungKatList.length > 1 ? 's': ''} in ${humanLang(ausbildungKatList)}`);

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1 >

  <span >Result in</span>
</h1>

<div >
  <label  for="selectKat">Ausbildungskategorie</label>
  <select  multiple="multiple" id="selectKat">
    <option value="Category 1">Category 1</option>
    <option value="Category 2">Category 2</option>
    <option value="Category 3">Category 3</option>
    <option value="Category 4">Category 4</option>
  </select>
</div>

Update: Replace entire word with variable names

function humanLang(arr) {
  if (arr.length <= 0) return '';
  if (arr.length === 1) return arr[0];
  const firsts = arr.slice(0, arr.length - 1);
  const last = arr[arr.length - 1];
  return firsts.join(', ')   ' and '   last;
}

// Update Title

const singularResult = 'Result';
const pluralResult = 'Results';

$("#selectKat").change(function () {
  var ausbildungKatList = [];

  $.each($("#selectKat option:selected"), function () {
    ausbildungKatList.push($(this).val());
  });

   $('.asg-heading .dynamicKat').html(`${ausbildungKatList.length > 1 ? pluralResult : singularResult} in ${humanLang(ausbildungKatList)}`);

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1 >

  <span >Result in</span>
</h1>

<div >
  <label  for="selectKat">Ausbildungskategorie</label>
  <select  multiple="multiple" id="selectKat">
    <option value="Category 1">Category 1</option>
    <option value="Category 2">Category 2</option>
    <option value="Category 3">Category 3</option>
    <option value="Category 4">Category 4</option>
  </select>
</div>

  • Related