2015-01-20 1 views
-3

Как заменить текст на каждый метод?jQuery заменить слова соответствия с каждым методом

Правильно ли это? оно не заменить/найти текст правильно

$(function(){ 

    var style_find = ['tab-1','tab-2','rounded-1','rounded-2','tabs-1','tabs-2','tabs-alt-1','tabs-alt-2','tab-alt-1','tab-alt-2']; 
    var cur_style = $('#obj').attr('class'); 
    var new_style; 

    $(style_find).each(function(i,cl){ 
     new_style = cur_style.replace(cl,'new-class'); 
     // it doesnt replace the whole word 
    }); 

}) 
+2

[jQuery.map()] (http://api.jquery.com/jquery.map/) – melancia

+0

Может быть Синтаксическая ошибка см. http://api.jquery.com/jquery.each/ для справки. –

ответ

1

String.prototype.replace() ведет себя по-разному в зависимости от типа это первый параметр. Рассмотрим этот код:

var example = "str str str str"; 
example = example.replace("str", "bob"); 
console.log(example === "bob str str str"); // === true? 

Я дал replace() строку для его первого параметра. Когда вы это делаете, он заменяет только первое вхождение подстроки.

При вызове replace() с RegExp вы получите то, что возвращает все матчи заменить

var example = "str str str str"; 
example = example.replace(/str/g, "bob"); 
console.log(example === "bob bob bob bob"); // === true 

Что нам нужно, это регулярное выражение, которое соответствует все, что вы хотите заменить.

var style_find = ['tab-1','tab-2','rounded-1','rounded-2','tabs-1','tabs-2','tabs-alt-1','tabs-alt-2','tab-alt-1','tab-alt-2']; 
var regexp = (function() { 
    var inner = ""; 
    style_find.forEach(function(el) { 
    inner = inner + el + "|"; 
    }); 
    return new RegExp(inner, "g"); 
}()); 

С regexp я могу изменить свой код:

$(function(){ 
    var style_find = ['tab-1','tab-2','rounded-1','rounded-2','tabs-1','tabs-2','tabs-alt-1','tabs-alt-2','tab-alt-1','tab-alt-2']; 
    var cur_style = $('#obj').attr('class'); 
    var new_style = cur_style.replace(regexp, 'new-class'); 
}); 
Смежные вопросы