2010-07-02 2 views
0

는 다음을 살펴 준비해주십시오자바 스크립트 조건 일치하지만 반환하지 않음?

jQuery(document).ready(function() { 
    var full_url = window.location.protocol + "//" + window.location.host + "/" + window.location.pathname;  
    var part_url = window.location.protocol + "//" + window.location.host + "/domain/shop/";  
    part_url = part_url + "cat1/"; 

    if (full_url == part_url) 
    { 
     jQuery("li.cat1").addClass("current"); 
    }  
}); 

위의 코드가 참이 결코 어떤 이유를 내가 왜 같은 의아해입니다. 나는 개별적으로 변수 "part_url"과 "full_url"을 경고했으며 둘 다 일치하여 if 문이 true를 반환하지 않는 이유는 무엇입니까? 나는 그것이 아마도 내가 바보짓 한 바보 같은 것이라는 것을 안다. ...

+0

/domain/shop/cat1 == window.location.pathname? (마지막 슬래쉬는 문제가 될 수있다.) – galambalazs

+0

첫 줄을 안다 :'jQuery (document) .ready (function() {'은'$ (function() {' –

답변

1

정말로 돌아 오지 않을거야? 시도 :

alert(full_url == part_url); 
문자열이 if의 내용을 그냥 아무 효과가 없다, 또는 여부를 일치하지 않는 여부에 약간의 표시를 줄 것이다

.

이 낮은/대문자 문제가 있다면, 그것은 (URL이 정규 표현식 문자를 포함 할 경우) 그렇지 않으면 오류/허위 일치를 얻을 수있는, 오히려 정규 표현식보다 비교 toLowerCase()를 사용하는 것이 좋습니다 :

if (full_url.toLowerCase() == part_url.toLowerCase()) { ... } 
즉,하지의 경우

이 - 시도 :

  • 을 문자열의 길이를 확인 :

    alert(full_url.length); alert(part_url.length); 
    
  • 일치하지 않는 부분을 좁힐 문자열에 substr를 사용
  • :

    alert(full_url.substr(1,20) == part_url(substr(1,20)); 
    

    (어쩌면 문자로 문자를 비교하기 위해 루프를 사용 -이 숫자 같은 것을 할 수있다 '1'편지 대 ' 항등 연산자가 false 말한다면 L '...)

+0

로 단축 될 수있다. 내 대답을 삭제하십시오. – ChaosPandion

+0

안녕하세요, psmears, 당신이 제안하고 이상한 결과를 얻었습니다. 두 변수에 경고 길이를 사용했는데 차이가 56과 57 이었지만 여기 키커가 있습니다. 뒤로 그리고 문자열은 동일합니다 ... 그래서 나는 왜 길이가 다른지와 왜 동등하지 않은지에 관해서는 알지 못합니다 ... 나는 모든 경우를 검사했고 그것들은 모두 더 낮아서 그렇게 생각하지 않습니다. 더 많은 아이디어가 있습니까? –

+0

@Rick : 'substr'을 시도해보십시오 - 문자열 중 하나가 어떻게 든 '보이지 않는'문자를 얻었을 수 있습니다. 예를 들어 처음 5 자로 경고를하면 다음과 같이 표시됩니다. 'http : '와'http '를 입력하면 보이지 않는 제어 문자가 있음을 알 수 있습니다. 시작/근처의 배우. 그리고 다른 누군가가 말했듯이, 마지막에 '/'를 확인하십시오 :) – psmears

0

는, 그들은 상관없이 당신이 그것을 믿을 얼마나 같은 아니에요 없습니다. ;)이 시도 : 당신이 호스트 후 2 슬래시와 http://www.example.com//domain/shop/cat1을 만들 수 있습니다 있도록

var test = function (s, t) 
{ 
    var sl = s.length; 
    var tl = t.length; 
    var l = sl < tl ? sl : tl; 
    for (var i = 0; i < l && s[i] == t[i]; ++i) /* empty */; 
    if (i < l || sl != tl) { 
     print("common head: '" + s.substr(0, i) + "'"); 
     print("tail s: '" + s.substr(i) + "'"); 
     print("tail t: '" + t.substr(i) + "'"); 
    } 
}; 
0
window.location.host + "/" + window.location.pathname; 

location.pathname은 최고의 /이 포함되어 있습니다. 확실히 이것은 결코 일치하지 않을 것입니다. 당신의 squinting-at-strings-to-see-you-they-the-same 힘을 개량하십시오!

+0

내 의견을 게시 한 후 당신이 옳다는 것을 알았고 틀렸어!사실은 이미 슬래시가 있지만 경고를하면 곧바로 슬래시가 그 슬래시가 사라져서 // 표시되지 않도록합니다 // 당신이 생각하기에 또는 그렇게해야한다고 생각합니다 ... 그래서 그걸 알아낼 수 없었습니다. 찾고있어. –

관련 문제