2016-06-22 64 views
0

我有一個查詢,我填充菜單和過濾項所以我的代碼類替代格式

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); 
} 

所以,你可以看到,我更換空間下劃線,如:

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

問題是,當我有3個短語,如

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

正如你可以看到我有一個丟失的下劃線在data-category="Transporting_of Materials"

Thankyou提前

回答

3

第一次調用替換時用全局替換下劃線的空格。

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

+0

它的工作原理,我只能更換這一行'菜單+ = 「

"+ cat +"
」;'THANKYOU – Gerry

0

您需要使用正則表達式來實現這一點。在JS中,replace()函數只能用於發生。

因此,您的代碼將如下所示。

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); 
}; 

此外,您可以在以下任務中找到更多信息。 How to replace all occurrences of a string in JavaScript?