2010-04-14 6 views
21

어떤 점에 대해서는 확인하고 싶습니다.링크의 href 속성에서 전체 URI를 가져옵니다.

목표는 링크에서 href 속성을 읽는 동안 항상 동일한 문자열 (내 경우에는 URI)을 얻는 것입니다. 예 : BASE_URL와

<a href="test.htm" /> = BASE_URL와 http://domain.name/

<a href="../test.htm" /> = BASE_URL와 http://domain.name/domain/

<a href="http://domain.name/test.htm" /> = 나는 위의 3 상황에서 http://domain.name/test.htm을 얻을 필요가 http://domain.name/

에서 임의의 폴더 (또는 다른 동일한 문자열).

몇 가지 테스트를 마치면 my_a_dom_node.href은 항상 http://domaine.name을 포함한 정규화 된 URI를 반환합니다. 이는 내가 원하는 것만 큼 좋을 것입니다.

jQuery의 동작이 다르므로 $(my_a_dom_node).attr('href')은 HTML 내부에 나타나는 내용 (텍스트)을 반환합니다. 그래서 내 트릭은 $(my_a_dom_node).get(0).href을 사용하여 완전한 URI를 얻는 것입니다.

질문 : 나는 이것을 의지 할 수 있습니까?

+3

BTW :'$ (my_a_dom_node) .get (0) .href' =='$ (my_a_dom_node) [0] .href' – Tomalak

답변

21

YES, 당신이 의지 할 수!

사람들이 단순한 자바 스크립트 (jQuery가 아님)를 사용했을 때 많은 사람들이 당신이 묻는 것의 반대를 물었고, href 속성에 쓰여진대로 실제 URL을 얻고 싶었습니다. 간단하게 수행

my_a_dom_node.getAttribute('href', 2); //works both IE/FF 

그런 다음 그들이 같은 코드를 필요와 jQuery를 항상 href 속성에 작성된 실제 URL을 반환 찾는 그들의 시간을 낭비하지 않는 사람을 도움이 jQuery를했다.

jQuery가 href 속성으로 작성된 URL을 반환하기 때문에 누군가가 전체 URL을 얻는 방법을 묻는 것은 재미 있습니다.

+0

예, 내 질문을 작성할 때 당신이 말하는 질문을 발견했습니다. 답변 감사합니다. – Savageman

+0

왜 값 '2'의 두 번째 인수를 제공합니까? 'getAttribute'에는 하나의 인수 만 있습니다. – Noitidart

+0

@Noitidart : getAttribute에는 두 개의 인수가 있으며 두 번째 인수는 선택 사항입니다. http://msdn.microsoft.com/en-us/library/ms536429(v=vs.85).aspx –

1

당신은 자바 스크립트의 비트를 사용하여 전체 URL을 잡습니다 수 :

function parseLink(link) { 
    var baseUrl = location.href.substring(0,location.href.lastIndexOf('/')); 
    if (link.indexOf('/') != -1) { 
     link = link.substring(link.lastIndexOf('/')); 
    } else { 
     link = "/"+ link; 
    } 
    var fullUrl = baseUrl + link; 
    return fullUrl 
} 
+0

정말 모든 하위 폴더 및 상대 경로에서 작동합니까? 내 이해에서, 그것은 사실이 아닙니다. – Savageman

+0

나는 그렇게 생각한다. baseUrl은 매우 간단하다. 누군가 날 잘못 알았나? – rnaud

+0

하위 폴더에서 작업하지 않습니다. –

10

네, 이에 의존 할 수 있습니다.

jQuery.extend({ 
    // ... 
    attr: function(elem, name, value, pass) { 
    // ... 

    var attr = !jQuery.support.hrefNormalized && notxml && special ? 
       // Some attributes require a special call on IE 
       elem.getAttribute(name, 2) : 
       elem.getAttribute(name); 

    // Non-existent attributes return null, we normalize to undefined 
    return attr === null ? undefined : attr;  
    } 
}); 

그래서 it'effectively 실제 속성 값을 반환 elem.getAttribute('href')를 호출 JQuery와 (1.4.2) 소스 코드를 찾고

, 나는 (관련 부분에 응축) 사용되는 jQuery.attr() 기능을 참조 반면에 href 속성은 표준 URL을 반환합니다.

  • hrefNormalized :

    그러나 jQuery를 지원 사이트라고하는 어느 jQuery.support.hrefNormalized에 대한 참조가 존재하면 true 동등한 .getAttribute() 방법 불변 요소 의 href 특성 검색한다면 정규화 된 URL에 을 정규화하는 것이 아닙니다. 현재 IE에서는 이 거짓이며 URL은 으로 정규화되었습니다. DOM L3 사양은

이것은 기본적으로 jQuery를 자체적으로 브라우저의 행동을 발견하고 일관된 결과를 제공하기 위해 적절하게 적응을 의미한다.

+0

위대한, 해답을 가져 주셔서 감사합니다. 나는 여기에 2 개의 승인 된 anwser를 줄 수 있었으면 좋겠다. 나는 그가 처음 이었기 때문에 Marco Demaio에게 투표했다. 기본적으로 같은 말을했다. – Savageman

+0

@Savageman : 예 ... 소스 코드를 파헤 치기까지 어느 정도 시간이 걸렸습니다. ;) – Tomalak

10

나는 그것이 오래된 질문이라는 것을 알고있다. 그러나 이것은 실제로 첫 번째로 등장한 것으로, 나는 여분의 해결책을 추가하는 것이 좋다. 난 아직도 누군가를하는 데 도움이되기를 바랍니다

$(my_a_dom_node).prop('href'); 

: jQuery를이 "소품"기능을 도입 한 이후로, 전체 URL을 얻는 것은 간단합니다.

관련 문제