检测锚点导致活动的window.location

时间:2010-02-09 09:41:24

标签: javascript jquery url comparison href

有这样一个html:

<a class="someclass" href="some/url/absolute/or/relative">Blah</a>

...以及这样的javascript:

$("a.someclass").onclick(function() {
    var link = $(this).attr("href");
    if (link == window.location) // <<<<<<<<<<<<
        doSomethingSpecial();
    else
        doOtherThing();
    return false;
});

这段代码显然不起作用。

如何可靠地检测某些锚点是否指向当前浏览器位置?

以下是一些注释:

  • Anchor href可以是绝对的也可以是相对的。
  • 应忽略网址的片段。

3 个答案:

答案 0 :(得分:1)

AFAIK,你无法察觉。因为我可以编写onclick事件处理程序,然后编写导致当前位置本身的代码。在这种情况下,您无法真正依赖href属性。

function ReloadWin()
{
    window.location.reload();
}

<a href="#" onclick="ReloadWin();">Click me to reload</a>

答案 1 :(得分:1)

问题是$('a').attr('href')总是返回相对路径。您需要使用本机obj.href属性来获取绝对路径,剥离哈希然后比较:

var clean = function(str) {
    return str.replace(/(\#.*)/,'').toLowerCase();
}

$("a.someclass").click(function(e) {
    if (clean(this.href) == clean(window.location)) {
        // the link destination is equal to window.location (excluding hashes)
        doSomethingSpecial();
    } else {
        doOtherThing();
    }
    e.preventDefault();
});

修改

如果要比较路径名,可以直接从锚元素中获取它:

$("a.someclass").click(function(e) {
    if (this.pathname == window.location.pathnname) {
        doSomethingSpecial();
    } else {
        doOtherThing();
    }
    e.preventDefault();
});

答案 2 :(得分:0)

试试这个:

$(document).ready(function(){
    $("a.someclass").click(function(){

        //convert both to lower case
        var h=$(this).attr("href").toLowerCase();
        var l=window.location.href.toLowerCase();

        //if has hash tag remove portion after if
        if(l.indexOf("?")>0)
            l=l.substring(0,l.indexOf("?"));
        if(l.indexOf("#")>0)
            l=l.substring(0,l.indexOf("#"));

        if(l.length > h.length)
            l = l.substring(l.length - h.length);

        if(l==h){
            alert("On same page");
        }else{
            alert("Other page");
        }
        return false;
    });
});