2016-02-14 5 views
1

Я получил эту функцию, чтобы восстановить некоторый вклад в ссылки (мне нужно избавиться от пробелов, запятых, специальные символы - такие вещи):Область переменных при обработке в функции

function linkbuilding(a) { 
    if (jQuery.inArray(' ',a)){ 
     a = a.replace(/ /g, "-"); 
    } 

    if (jQuery.inArray(',',a)){ 
     a = a.replace(/,/g, ""); 
    } 

    if (jQuery.inArray('ë',a)){ 
     a = a.replace(/ë/g, "e"); 
    } 

    console.log(a + " value"); 
} 

var plantNameLinkBuild = jQuery("span.plant-name"); 
plantNameLinkBuild.each(function(){ 
    var lnkName = jQuery(this).text().trim(); 
    linkbuilding(lnkName); 
    jQuery(this).wrap('<a href="../kruiden-a-z/'+lnkName+'"></a>'); 
}); 

Таким образом, функция linkbuilding rans на lnkName (linkbuilding (lnkName)), из console.log Я вижу, что значения меняются.

Но он не обновляет lnkName переменный исходный вход - я не получаю исправленные значения. Поэтому я получаю, в конце концов, связь с пробелами и т. Д.

Где я ошибаюсь? Как я могу сделать эту работу?

Спасибо!

+0

Вы меняете только локальную копию 'lnkName'. Вы должны вернуть измененное значение из 'linkbuilding' – Andreas

ответ

1

Переменная lnkName передается по значению, а не по ссылке, поэтому вам нужно сделать функцию возвращать новое значение, а затем обновить исходную переменную с результатом функции:

function linkbuilding(a) { 
    if (jQuery.inArray(' ',a)) { 
     a = a.replace(/ /g, "-"); 
    } 

    if (jQuery.inArray(',',a)){ 
     a = a.replace(/,/g, ""); 
    } 

    if (jQuery.inArray('ë',a)){ 
     a = a.replace(/ë/g, "e"); 
    } 

    console.log(a + " value"); 
    return a; 
} 

var plantNameLinkBuild = jQuery("span.plant-name"); 

plantNameLinkBuild.each(function(){ 
    var lnkName = jQuery(this).text().trim(); 
    lnkName = linkbuilding(lnkName); 
    jQuery(this).wrap('<a href="../kruiden-a-z/'+lnkName+'"></a>'); 
}); 

Или просто:

var lnkName = linkbuilding(jQuery(this).text().trim()); 

Также обратите внимание, что вы можете упростить функцию linkbuilding() с помощью регулярных выражений:

function linkbuilding(text) { 
    return text.replace(/,/g, '').replace(/ë/g, 'e').replace(/\s+/g, '-'); 
} 

Working example

+0

' a' - это не массив? – guest271314

+1

Это строка, которую можно прокрутить по индексу для проверки каждого отдельного символа. –

+0

Не знал, что строка может быть передана '$ .inArray' – guest271314

Смежные вопросы