1

そのような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のフラグメントは無視する必要があります。
4

3 に答える 3

1

AFAIK、あなたはそれを検出することはできません。onclickイベントハンドラーを記述してから、現在の場所自体につながるコードを記述できるためです。この場合、href属性に実際に依存することはできません。

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

<a href="#" onclick="ReloadWin();">Click me to reload</a>
于 2010-02-09T09:46:26.430 に答える
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();
});
于 2010-02-09T10:31:28.290 に答える
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;
    });
});
于 2010-02-09T09:59:18.507 に答える