我正在寻找一种搜索网页网址的方法,在该网页中查找特定关键字。
例如,如果哈希" /三"存在,我想运行一个JavaScript函数。但问题是,我有八个哈希值,它们可以按任何特定顺序触发。
这意味着我不能做这样的事情 -
<script>
window.onhashchange = function(){
switch(location.hash) {
case '#hide':
javascript:alert("Find a valid NFC tag to continue!")
break;
case '#hide/one':
javascript:alert("You found piece number one!")
break;
case '#hide/two':
javascript:alert("You found piece number two!")
break;
case '#hide/three':
javascript:alert("You found piece number three!")
break;
case '#hide/four':
javascript:alert("You found piece number four!")
break;
case '#hide/five':
javascript:alert("You found piece number five!")
break;
case '#hide/six':
javascript:alert("You found piece number six!")
break;
case '#hide/seven':
javascript:alert("You found piece number seven")
break;
case '#hide/eight':
javascript:alert("You found piece number eight!")
break;
}
}
</script>
因为网址最终可能是&#34; example.com/index.html#hide/one/five/three/etc ..&#34;。它现在的配置方式是,它专门搜索&#34;#hide / one&#34;,&#34; #elay / two&#34;等等。
但&#34;#hide&#34;没有插入每个哈希值,只有第一个哈希值。所以永远不会有##;; hide / one /#hide / two等等#34;。
我需要弄清楚如何在URL中搜索&#34; one&#34;,&#34; two&#34;,&#34; three&#34;等等,并相应地执行功能。
提前致谢,期待在此了解更多!
编辑 - 只需阅读我的帖子,我觉得我应该澄清一些事情。你知道JavaScript函数&#34; hash.length&#34;?类似&#34; hash.length&#34;但对于内容,例如&#34; hash.content&#34;或者什么会很棒。我不认为存在。
-Mitchyl
答案 0 :(得分:0)
var hashArray = location.hash.substr(1).split('/'); // substr(1) skips over the # at the beginning
if (hashArray.indexOf('hide') != -1) {
if (hashArray.indexOf('one') != -1) {
alert("You found piece number one");
} else if (hashArray.indexOf('two') != -1) {
alert("You found piece number two");
} ...
}
顺便说一句,在致电javascript:
之前,您不需要标签alert()
。您需要javascript:
的唯一时间是将脚本放入通常包含网址的HTML属性中,例如href
和src
属性 - 它取代http:
之类的内容来告诉它运行代码而不是下载文档。
它适用于此DEMO。点击该链接后,修改网址并将one
更改为two
,即可获得提醒。
答案 1 :(得分:0)
这个更有活力。
你只需要更改第一个var“aHash”,其余的将是autobuilt。 顺便说一句,这只是为了防止脚本对用户自己的哈希操作做出反应。 否则你可以只迭代拆分的哈希字符串,但这很容易出错。
// here goes the configuration
// if you want to change the "keys" here's the right place
// therefor it's better maintainable
var aHash = ['one', 'two', 'three'];
// autobuild an object with values as keys from given array at the top
var oHash = {},
i = aHash.length;
// don't forget that iteration usually starts with [0] but if you get the length will be 1 if one element is available
while( i-- )
{
oHash[ aHash[ i ] ] = null;
}
window.onhashchange = function()
{
// split hash into pieces into an array
aHash = document.location.hash.split('/');
var iL = aHash.length;
// workaround for case: '#hide/'
if (aHash[ iL-1 ] === '')
{
--iL;
}
if (iL == 1 && aHash[0] === '#hide')
{
alert ('Find a valid NFC tag to continue!');
return;
}
// only needed if one wants to collect the result
var sAlert = '';
// iterate from left to right in hash
// if this isn't nessecary one can use the same while structure like at the beginning (without iL)
i = -1;
while( ++i < iL )
{
if (oHash[ aHash[ i ] ] === null )
{
// alert every time
alert( 'You found piece number ' + aHash[ i ] + '!' );
// colect for alert
sAlert += aHash[ i ] + ' and ';
}
}
if (sAlert !== '')
{
alert( 'You found pieces number ' + sAlert.substr( 0, sAlert.length-5 ) + '!' );
}
}
答案 2 :(得分:-1)
如果你想测试哈希以#hash
开头并且哈希路径中存在数字,那么你可以试试这个。
window.onhashchange = function() {
if (location.hash.indexOf('#hash') !== 0) {
return;
}
location.split('/').forEach(function(num) {
switch (num) {
case 'one':
alert("You found piece number one!");
break;
// ...
case 'eight':
alert("You found piece number eight!");
break;
}
});
}