2011-09-17 83 views
0

如何獲取鏈接的名稱「test.php」中的「test」?如何獲得沒有文件擴展名的鏈接名稱?

我試圖建立一個變量:

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

我不知道substring()如何工作。這是一種正確的方法嗎?

謝謝。

UPDATE:

$(".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屬性將檢索完全限定的URL,而不管原始標記中以http://https://開頭的內容以及包含域和路徑。如果您只想獲取標籤中實際指定的內容,則可以使用this.getAttribute('href')而不是this.href

相關問題