检测锚点是否通向活动窗口。位置

发布于 2024-08-21 04:12:42 字数 597 浏览 5 评论 0原文

拥有这样的 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;
});

这段代码显然不起作用。

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

以下是一些注意事项:

  • 锚点的 href 可以是绝对的,也可以是相对的。
  • URL 的片段应该被忽略。

Having such an html:

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

... along with such javascript:

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

this code obviously doesn't work.

How to reliably detect that some anchor is leading to the current browser location?

Here are some notes:

  • Anchor's href could be either absolute or relative.
  • the fragments of the URLs should be ignored.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

信愁 2024-08-28 04:12:42

问题是 $('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();
});

The problem is that $('a').attr('href') always returns the relative path. You need to use the native obj.href attribute to get the absolute path, strip hashes and then compare:

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

EDIT:

If you want to compare pathnames, you can grab it directly from the anchor element:

$("a.someclass").click(function(e) {
    if (this.pathname == window.location.pathnname) {
        doSomethingSpecial();
    } else {
        doOtherThing();
    }
    e.preventDefault();
});
与他有关 2024-08-28 04:12:42

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

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

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

AFAIK, you cannot detect that. Because I can write onclick event handler and then write the code that leads to the current location itself. In this case you can't really depend n the href attribute.

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

<a href="#" onclick="ReloadWin();">Click me to reload</a>
素染倾城色 2024-08-28 04:12:42

试试这个:

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

try this:

$(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;
    });
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文