2016-02-14 96 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>'); 
}); 

因此,从console.log中的函数linkbuilding在lnkName(linkbuilding(lnkName))上传递,我发现值发生了变化。

但它不更新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