如何只获取没有文件扩展名的链接名称?

时间:2011-09-17 04:30:41

标签: jquery substring

如何仅获取链接的名称,例如“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();
 });

首先,谢谢你的回答。但是我犯了什么错吗?这仍然不起作用。

也许是我的错:我也需要在开头删除“#”。

更新三

这是我正在处理的完整代码:

$(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();
});

但那不是我想要的。代码太多了。现在它与加载的不同步 内容淡入。以某种方式结合两个fadeins会更好。

最终解决方案

远离形成解决这个问题的第一个想法我设法将它绑定到应该实际使用的函数:

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

谢谢大家。学到了更多关于子串的信息!

3 个答案:

答案 0 :(得分:1)

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

'#'或'.php'可以更改为从任何字符串的开头或结尾删除任何你喜欢的内容。

答案 1 :(得分:0)

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

答案 2 :(得分: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

您可能还想知道,检索href代码的<a>属性将检索完全限定的网址,无论原始代码中以http://或{开头的内容{1}}并包含域和路径。如果您只想获得标记中实际指定的内容,可以使用https://代替this.getAttribute('href')

相关问题