有这样一个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
可以是绝对的也可以是相对的。答案 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;
});
});