0

I have a query where I populate menu and filter items so there is my code

function completeGalleryCat(data, target, eng) {
var items = data.d.results;
var prefix = "";
var sufix = "<div class='clear'></div>";
if (eng)
    prefix = "<div class='filter selected' data-category='cat-all'>All</div>";
else
    prefix = "<div class='filter selected' data-category='cat-all'>Todas</div>";
var menu = "";
var cat = "";
for (var item in items) {
    if (eng)
        cat = items[item].English;
    else
        cat = items[item].Title;
    menu += "<div class='filter' data-category='" + cat.replace(" ", "_").replace(/[^\w\s]/gi, '') +"'>"+ cat +"</div>";
   }
$(target).html(prefix + menu + sufix);
}

So, as you can see, I replace space for underscore like:

 menu += "<div class='filter' data-category='" + cat.replace(" ", "_").replace(/[^\w\s]/gi, '') +"'>"+ cat +"</div>";

The problem is when I have 3 phrases like

<div class="filter" data-category="Transporting_of Materials">Transporte de Materiales</div>

As you can see I have a missing underscore in data-category="Transporting_of Materials"

Thankyou in advance

Gerry
  • 245
  • 2
  • 4
  • 17

2 Answers2

3

Replace the spaces with underscores globally in the first call to replace.

var title = 'Transporting of Materials';
console.log(title.replace(/\s/g, "_").replace(/[^\w\s]/gi, ''));
0

You need to use a regular expression to achieve that. In JS the replace() function will work only for the occurence.

So your code will look like the following.

menu += "<div class='filter' data-category='" + cat.replaceAll(" ", "_").replace(/[^\w\s]/gi, '') +"'>"+ cat +"</div>";

String.prototype.replaceAll = function(search, replacement) {
    var target = this;
    return target.replace(new RegExp(search, 'g'), replacement);
};

Also you can find further information in the following task. How to replace all occurrences of a string in JavaScript?

Community
  • 1
  • 1
Cengiz Araz
  • 680
  • 9
  • 17