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');
});
[jQuery.map()] (http://api.jquery.com/jquery.map/) – melancia
Может быть Синтаксическая ошибка см. http://api.jquery.com/jquery.each/ для справки. –