2010-12-07 4 views
0

다음 코드는 모든 앵커를 통과하기 위해 작성된 코드입니다. href가되고 이전 주소가 포함되어 있으면 이전베이스를 새 것으로 교체하십시오. 사이트와 함께이 코드를 작성하기 훨씬 전에 문제가 발생 했음에도 불구하고이 문제에 대한 신속하고 더러운 솔루션이 필요하므로이 코드를 참조하십시오.큰 문자열의 작은 조각 대체

따라서 아래 코드는 작동하지 않습니다. .place는 완전 일치가 필요하므로 "foo is good"이라는 문장에서 "foo"를 찾을 수 있지만 "fooIsGood"에서는 "foo"가 아닙니다.

$('a').each(function() { 
    var addressSwitch = $(this).attr("href"); 
    if (addressSwitch){ 
     var test = addressSwitch.indexOf("http://www.oldaddress.com"); 
     if (test == 0){ 
      addressSwitch.replace("http://www.oldaddress.com/", "www.newaddress.com"); 
      $(this).attr("href" , addressSwitch); 
      } 
     } 
}); 

그럼 어떻게 될까요?

미리 감사드립니다.

+0

흠 ...'replace()'가 올바르게 일치해야합니다. – matthewpavkov

+0

정규식 패턴이 필요합니다. 몇 분만 기다려주세요. 내가 게시 할 것입니다 ... 어떤 로직 – kobe

+0

당신은 다른 형식의 문자열을 당신이 준 코드를 대체 할 것인지 찾고 있습니까? – kobe

답변

0

다음의 비교를 위해를 소문자 NEWVALUE의 길이 NEWVALUE + 문자열을 사용하는 모두를 전환하고 앞으로. 예 :

$('a').each(function() { 
    var replacer = "http://www.oldaddress.com"; 
    var addressSwitch = $(this).attr("href"); 
    if (addressSwitch){ 
     var test = addressSwitch.toLowerCase().indexOf(replacer); 
     if (test == 0){ 
      addressSwitch = replacer + addressSwitch.subString(replacer.length); 
      $(this).attr("href" , addressSwitch); 
      } 
     } 
}); 
2

.replace()가 제대로 작동하지만 당신이 교체 된 값을 할당하지 않은, 그것은 할 필요가 :

addressSwitch = addressSwitch.replace("http://www.oldaddress.com/", "www.newaddress.com"); 

.replace() 원래 문자열을 변경하지 않는 것을 기억, 그것은을 가진 새로운 하나를 반환 값이 대체되었습니다.

.attr()는 기능을한다 기억, 그래서 당신은 당신의 코드 다운이에 슬림 수 :

$('a[href^="http://www.oldaddress.com"]').attr("href", function(i, href) { 
    return href.replace("http://www.oldaddress.com/", "www.newaddress.com"); 
}); 
+1

당신은 기계입니다. 나는 너를 믿기를 거부한다. xD –

+0

@Jacob - CraverBot v1.33.6 (아직 완성되지 않음)이 지금 바쁩니다. 메시지를 받아 볼까요? –

+0

@CraverBot - 물론, Nick에게 그가 당신을 차단할 수 있는지 물어보십시오 - 그의 봇이 내 모든 담당자를 훔쳐갑니다! ;-) –

관련 문제