2009-10-01 2 views
1

여기에 문제가 있습니다.자바 스크립트 href의 매개 변수 찾기 및 교체

쿼리에서 매개 변수를 확인해야합니다. 그것이 설정 되었다면, 나는 그것을 바꿀 필요가있다 (더 힘든 부분). 설정이되어 있지 않으면 설정해야합니다 (쉬운 부분)

나는 쉬운 일이 될 것이라고 확신했지만, 생각보다 조금 더 복잡해졌습니다. 특히 매개 변수가 여러 개인 경우에 내가 찾고있는 매개 변수가 중간에 있습니다.

매개 변수는 "siteLanguage"입니다, 항상 xxen 또는 es이든 같은 두 문자를 나타냅니다 =xx옵니다. 그래서 어쩌면 정규식은 대답 (소년, 정규식에서 빨아합니까)

이 사람에 대한 프레임 워크가 없습니다, 그냥 일반 '자바 스크립트.

+0

가 쿼리 문자열을 의미합니까 ... 사실

function changeLanguage(lang) { if (location.search.indexOf("siteLanguage") > -1) { //siteLanguage set location.href = location.search.replace(/siteLanguage=[a-z][a-z]/, "siteLanguage="+lang); } else if (location.search == "") { location.href += "?siteLanguage="+lang; } else { location.href += "&siteLanguage="+lang; } } 

9 라이너 기능이 꽤 행복을? – Eric

+0

js를 실행하는 페이지의 href 또는 페이지의 링크 href? – Eric

+0

그래, 쿼리 문자열. 내 잘못이야. (: – peirix

답변

0

이 너무 같은 빠른 해킹 일까지 종료 :

2

모든 링크를 찾는 방법을 알아 냈습니다. 나는 (첫 번째 ? 후 바로 걸릴 다)를 query를 버려야하는 것이 좋습니다 다음이 &에서 (즉, 매개 변수를 분리하기 때문에) 분할 service://host/path?query

URL의 표준 형식입니다.

너는 key=value 형태의 배열로 남을 것이다. 그것을 연관 배열로 나눕니다. 이제 그 배열에서 작업 할 수 있습니다. 수정 한 후에는 쿼리에 다시 참가하여 링크의 href 속성을 설정해야합니다.

+0

꽤 방수 된 것처럼 들리지만, 단지 매개 변수를 찾고 매개 변수의 이름을 알기조차하기에는 너무 복잡합니다. 이것은 일반적인 기능을 위해서는 더 좋을 것이라고 생각합니다. – peirix

1

이렇게하면 언어를 추가하거나 조정하는 문서 전체에서 "a href ="가 모두 선택됩니다.

checkhrefs = function(lang){ 
     var links = document.getElementsByTagName("a"); 
     for (var i=0;i<links.length;i++){ 
      if (links[i].href.indexOf("siteLanguage") == -1){ 
       links[i].href += "&siteLanguage="+lang; 
      } else { 
       links[i].href = links[i].href.replace(new RegExp("siteLanguage=[a-z][a-z]"),"siteLanguage="+lang); 
      } 
     } 
    } 
+0

그리고 지금은 그렇지 않습니다. 너는 전혀 필요 없어 롤 – Mark

+0

Hehe. 아니,하지만 정규 표현식을 좋아해. indexOf + substring + replace를하는 것보다 더 빠를 수도있어. – peirix