我有一些jQuery/JavaScript代码,我想只在URL中有一个散列(#)锚链接时运行。如何使用JavaScript检查这个字符?我需要一个简单的全方位测试,可以检测到如下url:
example.com/page.html #锚 example.com/page.html # anotheranchor
基本上是这样的:
if (thereIsAHashInTheUrl) {
do this;
} else {
do this;
}
我有一些jQuery/JavaScript代码,我想只在URL中有一个散列(#)锚链接时运行。如何使用JavaScript检查这个字符?我需要一个简单的全方位测试,可以检测到如下url:
example.com/page.html #锚 example.com/page.html # anotheranchor
基本上是这样的:
if (thereIsAHashInTheUrl) {
do this;
} else {
do this;
}
当前回答
大多数人都知道document.location中的URL属性。如果您只对当前页面感兴趣,那就太好了。但问题在于能否解析页面上的锚,而不是页面本身。
大多数人似乎忽略了这些URL属性也可以用于锚定元素:
// To process anchors on click
jQuery('a').click(function () {
if (this.hash) {
// Clicked anchor has a hash
} else {
// Clicked anchor does not have a hash
}
});
// To process anchors without waiting for an event
jQuery('a').each(function () {
if (this.hash) {
// Current anchor has a hash
} else {
// Current anchor does not have a hash
}
});
其他回答
下面是一个简单的函数,返回true或false(有/没有标签):
var urlToCheck = 'http://www.domain.com/#hashtag';
function hasHashtag(url) {
return (url.indexOf("#") != -1) ? true : false;
}
// Condition
if(hasHashtag(urlToCheck)) {
// Do something if has
}
else {
// Do something if doesn't
}
在这种情况下返回true。
基于@jon-skeet的评论。
...或者有一个jquery选择器:
$('a[href^="#"]')
把它放在这里,作为从任意类似uri的字符串中抽象位置属性的方法。虽然窗口。如果location instanceof location为true,则任何调用location的尝试都会告诉你它是一个非法构造函数。你仍然可以通过将你的字符串设置为DOM锚元素的href属性来获得诸如散列,查询,协议等,然后它将与window.location共享所有的地址属性。
最简单的方法是:
var a = document.createElement('a');
a.href = string;
string.hash;
为了方便起见,我写了一个小库,利用它来替换本机Location构造函数,使用一个将接受字符串并产生窗口的构造函数。位置类对象:Location.js
window.location.hash
将返回哈希标识符
function getHash() {
if (window.location.hash) {
var hash = window.location.hash.substring(1);
if (hash.length === 0) {
return false;
} else {
return hash;
}
} else {
return false;
}
}