2017-06-07 68 views
1

我的那個直接到對應於每個在美國50個州的網頁鏈接列表,以取代內HREF空間。使用jQuery我需要用連字符

我通過每個狀態在陣列中循環並增加它的每個HREF但對於包含兩個詞態我需要以連字符('-'),以替換它們之間的空間(' ')。

例如:New York必須New-York代替。

<a href="http://www.projectknow.com/find/New York/" class="spaces">

必須

<a href="http://www.projectknow.com/find/New-York/" class="spaces">

BE REPLACED這是我得到了這麼遠,但它不工作。仍然是新的jQuery和任何幫助將不勝感激。

var option = ''; 
for (var i = 0; i < states.length;i++){ 
    option += '<li><a href="http://www.states.com/find/'+ states[i] +'/" 
    class="spaces">'+ states[i] +'</a></li>'; 
} 

$('.menu').append(option); 

$("a.spaces").each(function(){ 
    $(this).attr('href', $(this).attr("href").replace("","-")); 
}); 
+0

感謝您的幫助! – CorralesD

+0

您的字符串不包含空格。此外,在JS中,替換不會替換搜索字符串的所有實例,除非搜索參數是正則表達式,您需要實現如下所示:https://stackoverflow.com/a/2116614 –

+1

爲什麼要更改在事實之後說出[i]?爲什麼不在建立鏈接時改變它? – Taplar

回答

0

你太親近了!

問題:

$(this).attr('href', $(this).attr("href").replace("","-"));

因爲"" != " "

答:

$(this).attr('href', $(this).attr("href").replace(" ","-"));

但替換隻替換第一次出現。我們可以推薦正則表達式,但正如你所說,你仍然在試圖弄清楚什麼;正則表達式將只是迷惑你在這個時候

function replaceAll(str, find, replace) { 
    str = str.replace(find, replace); 
    if(str.indexOf(find) > -1) { 
    return replaceAll(str, find, replace); 
    } 
    return str; 
} 

然後$(this).attr('href', replaceAll($(this).attr('href'), ' ', '+'));

+0

不完全。 [與string.replace](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace)中使用這種方式只替換第一個實例。如果有多個空間會怎樣? –

2

使用此代碼來代替:

$(this).attr('href', $(this).attr("href").replace(/\s/g, "-"); 
+0

我編輯了我的答案。 – Anokrize

+2

爲什麼不這樣做替換爲您正在構建的鏈接,而不是在事後? – Taplar

+0

你是對的! @ Lai32290剛發佈它。 – Anokrize

1

也許你可以先更換它,它添加到鏈接標籤,然後你不」 t需要在添加後處理它,就像這樣:

var option = ''; 
 
for (var i = 0; i < states.length;i++){ 
 
    var state = states[i].replace(/ /g, '-'); 
 
    option += '<li><a href="http://www.states.com/find/'+ state +'/" class="spaces">'+ states[i] +'</a></li>'; 
 
}

1

var states = [ 'New York', 'New Jersey', 'New Mexico' ]; 
 

 
$('.menu').append(states.map(function(state){ 
 
    return '<li><a href="http://www.states.com/find/'+ state.replace(/[ ]/g, '-') +'/" class="spaces">'+ state +'</a></li>'; 
 
}).join(''));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul class="menu"></ul>