2011-05-04 3 views
2

모든 외부 링크에 자동으로 광고 타겟 = "_ 빈"스크립트를 만들고 있습니다. 문제는 스크립트가 새 탭에서 내부 절대 링크를 열어 놓는 것입니다. 이 테스트 링크 문제를 확인할 수 있습니다 http://www.fairfood.org/testtest/외부 링크에 _blank를 추가하는 jQuery

$("a").filter(function() { 
    return this.hostname && this.hostname !== location.hostname; 
}).each(function() { 
    $(this).attr({ 
     target: "_blank", 
     title: "Visit " + this.href + " (click to open in a new window)" 
    }); 
}); 

은 아무도이 문제를 해결하는 방법을 알고 있나요?

도움을 주시면 감사하겠습니다.

+0

해당 페이지에는 'TWTR이 정의되지 않았습니다.'와 'FB가 정의되지 않았습니다.'와 같은 일부 JS 오류가 있습니다. 먼저 수정하는 것이 좋을지도 모릅니다. – pixelbobby

+0

'www.fairfood.org'! ='fairfood.org' – jensgram

+0

여기에'hostname' 확인이 필요하다고 생각하지 않습니다. 또한이 객체는 다른 브라우저에서 다르게 취급되므로 'not'선택기를 사용하면 도메인 이름이 작동해야합니다. – pixelbobby

답변

10

www.yourhost.com, 당신의 링크가 일치하지 않는 경우에, 그래서이 작동하지 않는 yourhost.com와 동일하지 않습니다.

항상 유효한 URI로 연결된다는 것을 알고있는 경우 www.을 꺼낼 수 있습니다.

$("a").filter(function() { 
    return this.hostname && 
      this.hostname.replace(/^www\./, '') !== 
       location.hostname.replace(/^www\./, ''); 
}).each(function() { 
    $(this).attr({ 
     target: "_blank", 
     title: "Visit " + this.href + " (click to open in a new window)" 
    }); 
}); 
,

(단, 당신이 this.href 위해 필요 그냥 뭔가가 알아야 할 jQuery를이 요소 세트에 대한 이미 지식이기 때문에 또한, .each의 사용은, 거의 중복입니다.).

Live example.

+0

+1 좋은 해결책입니다. @ Zoltan은 그것이 작동하는 경우 대답으로 표시하는 것을 잊지 마십시오. 그래, 나는 '각각의'불필요한 루프가 아닌가? – pixelbobby

+0

@pixelbobby : 내 작은 텍스트보기. 'this.href'에 필요합니다. –

+0

정말 고맙습니다 Tomalak, 매력처럼 작동합니다! – Zoltan

1

이 작업을 수행하는 하나의 jQuery 셀렉터를 사용할 수 있습니다

$('a').not('a[href*="fairfood.org/"]').each(function(){ 
    $(this).attr({target: "_blank", title: "Visit " + 
      $(this).href + " (click to open in a new window)"}); 
}); 
+2

'Go here!!!1' –

+0

thx. .org를 추가했습니다. 내가 그것을 읽을 때 웃었 기 때문에 귀하의 댓글을 +1했습니다. – pixelbobby

+1
0

fairfood.org 및 www.fairfood.org는 기술적으로 다른 호스트 이름입니다. 두 스크립트가 모두 스크립트에서 작동하도록하려면 테스트 전에 www를 제거하십시오.

0

위에서 언급 한 것처럼 www.fairfood.orgfairfood.org과 같은 호스트가 아닙니다. WWW 및 비 WWW 호스트를 하나로 처리하지 마십시오. 대신 www을 사용할지 여부를 선택하십시오. 그리고 나서 은 사이트 전체에 붙어 있습니다..

(이 잠재적 duplicate content penalties을 피할 수 있다는 이점이 있습니다.)

+0

'Go here!!!1' –

+0

@Tomalak Geret'kal 나는 수정하여 dodgy 해법을 제거했다. :) – jensgram

+0

내가 말할 수있는 한, 당신이주는 링크의 사이트는이 경우에 중복 된 내용의 벌칙이 적용되지 않을 것이라고 설명한다. –

관련 문제