2011-09-17 3 views
0

링크의 이름 만 어떻게 가져올 수 있습니까? 예 : "test.php"에서 "test"하시겠습니까?파일 확장자가없는 링크의 이름 만 얻으려면 어떻게해야합니까?

var linkname= this.href.substring(2); 

substring() 정말 어떻게 작동하는지 모르겠어요 :

나는 변수를 설정하기 위해 노력하고있어. 이것은 올바른 접근 방식입니까?

감사합니다.

업데이트 : 답변 먼저

$(".nav").delegate("a", "click",function() { 
    var linkname = this.href.substr(0, (this.href.length - '.php'.length)); 
    $("#claim"+linkname).fadeIn('slow').siblings().hide(); 
}); 

, 감사합니다. 하지만 뭔가 잘못 했습니까? 여전히 작동하지 않습니다.

아마도 내 잘못 : 처음에는 "#"을 제거해야합니다. 세

내가 일하고 있어요 이것을 전체 코드

UPDATE :

$(document).ready(function(){ 

$("#claimone, #claimtwo, #claimthree").hide(); 

$("#claimone").show(); 

$(".nav").delegate("a", "click",function() { 

    var linkname = this.href.substr(0, (this.href.length - '.php'.length)); 

    $("#claim"+linkname).fadeIn('slow').siblings().hide(); 

    }); 
}); 

두 번째 함수는 "#의 link.php"를 생성합니다. 그래서 그것이 충돌하지 않는지 나는 모른다. 모든 주장은 index.php에 있습니다. 새로로드 된 모든 콘텐트마다 콘텐트를 변경하기를 원합니다. 링크는 href = "one.php", href = "two.php", href = "three.php"와 같습니다.

$(function() { 

    var newHash  = "", 
     $mainContent = $("#maincontent-wrapper"), 
     $pageWrap = $("#wrapper"), 
     baseHeight = 0, 
     $el; 

    $pageWrap.height($pageWrap.height()); 
    baseHeight = $pageWrap.height() - $mainContent.height(); 

    $(".nav").delegate("a", "click", function() { 
     window.location.hash = $(this).attr("href"); 
     return false; 
    }); 

    $(window).bind('hashchange', function(){ 

     newHash = window.location.hash.substring(1); 

     if (newHash) { 
      $mainContent 
       .find(".maincontent") 
       .fadeOut(200, function() { 
        $mainContent.hide().load(newHash + " .maincontent", function() { 
         $mainContent.fadeIn(200, function() { 
          $pageWrap.animate({ 
           height: baseHeight + $mainContent.height() + "px" 
          }); 
         }); 
         $(".nav a").removeClass("active"); 
         $(".nav a[href="+newHash+"]").addClass("active"); 
        }); 
       }); 
     }; 

    }); 

    $(window).trigger('hashchange'); 

}); 

이것은 실제 해결책은 아니지만 작동합니다. 나는 각 href에 .link 클래스와 각 클레임의 이름을 부여했다.

$(".link").click(function() { 
    var divname= this.name; 
    $("#claim"+divname).fadeIn(200).siblings().hide(); 
}); 

하지만 그건 내가 원하는 바가 아닙니다. 코드가 너무 많습니다. 그리고 이제로드 된 콘텐츠 페이드 인과 동기화되지 않습니다. 두 페이딩을 어떻게 든 결합하는 것이 좋을지도 모릅니다.

최종 솔루션

은 멀리 실제로 작업을해야 내가 함수에 바인딩 할이 관리 해결의 첫 번째 아이디어를 형성 :

$claim 
     .find("#claim") 
       .fadeOut(200, function() { 
        $claim.show().load(newHash + " #claim", function() { 
         $claim.hide().fadeIn(200); 
    }); 
       }); 

모두에게 감사를. 옆에있는 서브 링에 대해 조금 더 배웠습니다!

+0

이름의 의미. "끝나지 않고"의미 이름 attr 또는 텍스트입니다. 묻고있는 예제를 제공합니다. – Gowri

+0

"test.php"에서 ".php"를 단순히 제거하고 싶습니다. 정확히 무엇이 호출되는지 모르겠습니다. – Melros

+0

"작동하지 않음"을 정의하십시오. 당신이하려고하는 것이 명확하지 않습니다. 'this.href'는 "http://example.com/test.php"일 가능성이 높습니다. 따라서 "#claim"+ linkname'은 "#claimhttp : //example.com/test"가됩니다. 현대적인 브라우저에서'console.log (this.href)'와'console.log (linkname)'을 사용하여 무슨 일이 일어나고 있는지 알 수 있습니다. – six8

답변

0
var linkname; 
if (this.href.indexOf('.') != -1) { 
    linkname = this.href.substr(0, this.href.lastIndexOf('.')); 
} 
else { 
    linkname = this.href; 
} 
1
var linkname = this.href.substr('#'.length, (this.href.length - '.php'.length)); 

'#'또는 '.PHP는'당신이 처음이나 문자열의 끝에서 원하는대로 제거하기 위해 변경 될 수 있습니다.

당신이 정규 표현식에 파일 이름의 끝에서 파일 확장자 제거 할 수 있습니다
+0

'.php' 만 처리하고, 확장자가'.xdoc'이거나 확장자가 없으면 오류가 많습니다. 충분하지 않거나 너무 많은 문자가 제거됩니다. – six8

+0

이 하나를 추가했지만 여전히 작동하지 않았습니다. 내 질문을 업데이트했습니다. 어쩌면 그건 내 잘못이야? – Melros

+0

오케이, 죄송합니다. 이제 최종 업데이트. 나는 처음부터 "#"을 제거해야합니다. – Melros

0

:

var url = this.href; // test.php 
url = url.replace(/\.[^\.\/]*$/, ""); 
alert(url); // "test" 

이는 문자열의 마지막에 마지막 기간에서 문자를 제거하고 그것은 단지 그렇게에서 할 것 이러한 결과를 얻을 수 있도록 마지막 경로 요소 :

foo/test.php ==> foo/test 
test.php  ==> test 
foo.x/test.php ==> foo.x/test 
foo.x/test  ==> foo.x/test 
test.   ==> test 
test   ==> test 

구조적으로,이 정규 표현식은 다음과 같다 :

a period 
followed by zero or more characters that is not a period and is not a slash 
up until the end of the string 

<a> 태그의 href 속성을 검색하면 http:// 또는 https://으로 시작하고 도메인 및 경로가 포함 된 원본 태그의 내용에 관계없이 정규화 된 URL을 검색한다는 것을 알고 싶을 수도 있습니다. 실제로 태그에 지정된 내용 만 가져 오려면 this.href 대신 this.getAttribute('href')을 사용할 수 있습니다.

관련 문제