2010-07-14 3 views
4

Привет Я написал функцию, которая используется для изменения текста в ячейке таблицы, таблица отображает членов команды, но не находится в читаемом формате, поэтому мне нужно преобразовать вывод строки в читаемый формат.Рефакторинг для каждого оператора

Все это прекрасно работает, однако мне было интересно, может ли кто-нибудь помочь мне перефакторировать эту функцию, поскольку она кажется abit сырой?

Jquery код:

$(".membersName").each(function() { 

    var memberName = $(this).text(); 
    var splitmemberName = memberName.split("="); 
    var finalNameSplit = splitmemberName[1].split(","); 
    $(this).empty(); 
    $(this).append(finalNameSplit[0]); 


}); 

Любая помощь или советы будут с благодарностью. Приветствия заранее

ответ

3

Выглядит хорошо! Вместо этого вы можете использовать RegExp, но я не могу сказать, что это было бы лучше. Хотя это:

$(this).empty(); 
$(this).append(finalNameSplit[0]); 

Может быть сокращен до этого:

$(this).empty().append(finalNameSplit[0]); 
+0

Brilliant приветствий Джош! – jonnyhitek

+0

Примечание: вы можете технически объединить всю функцию в одну строку кода, если хотите. Тем не менее, это было бы менее понятным для понимания. Теперь у вас есть хороший баланс. –

0

Объединение может помочь вам немного в местах, например:

$(this).empty(); 
$(this).append(finalNameSplit[0]); 

Может стать

$(this).empty().append(finalNameSplit[0]); 

Кроме того, попробуйте кэшировать $(this) для повышения производительности, т.е.

var $this = $(this); 

Технически, вы могли бы объединить эти строки:

var memberName = $(this).text(); 
var splitmemberName = memberName.split("="); 
var finalNameSplit = splitmemberName[1].split(","); 

Как так:

var finalNameSplit = $(this).text().split("=")[1].split(","); 

Что означает, что вы могли бы написать это в одной строке кода:

$(this).empty().append($(this).text().split("=")[1].split(",")[0]); 

Хотя ваша версия намного читаема.

+0

Блестящие приветствия Джеймса, определенно немного пищи для размышлений! – jonnyhitek

+1

James - Вы выполняете '.empty() '* before * вы получаете текст. Таким образом, не будет никакого текста, который можно было бы манипулировать. : o) – user113716

1

только один:

$(".membersName").html(function(i, old) { 
    var eqpos = old.indexOf("="); 
    return old.substring(eqpos+1, old.indexOf(",", eqpos)); 
});​ 
+0

Вы можете быть более jQuery с этим ответом и вместо этого использовать $ (this) .html(). –

2

Попробуйте это: http://jsfiddle.net/C9fMN/

$(".membersName").each(function() { 
    $(this).text(function(i,txt) { 
     return txt.split("=")[1].split(",")[0]; 
    }); 
}); 

Нет необходимости использовать .empty() этот путь, так как вы заменяете текст в целом.

На самом деле, таким образом, вы действительно не нужно даже вызов .each():

http://jsfiddle.net/C9fMN/1/

$('.membersName').text(function(i,txt) { 
    return txt.split("=")[1].split(",")[0]; 
}); 
Смежные вопросы