2011-09-17 74 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

相关问题