Javascript 检测单击链接的ID以更改链接的位置?

Javascript 检测单击链接的ID以更改链接的位置?,javascript,jquery,html,Javascript,Jquery,Html,因此,我正在尝试创建一个名为testBrowser()的JavaScript函数,用于检测用户是否在移动设备上(我有这个功能) 我有三个链接运行相同的功能,但我希望每一个都有不同的结果。我已经找到了我想要的方法,但实际上无法做到,因为我需要检测所点击链接的ID。我在网上找到的所有选项似乎都不起作用 我正在努力解释这一点,但阅读我的代码应该会有所帮助 HTML: <ul> <li><a href="javascript:testBrowser()" id="t

因此,我正在尝试创建一个名为
testBrowser()
的JavaScript函数,用于检测用户是否在移动设备上(我有这个功能)

我有三个链接运行相同的功能,但我希望每一个都有不同的结果。我已经找到了我想要的方法,但实际上无法做到,因为我需要检测所点击链接的ID。我在网上找到的所有选项似乎都不起作用

我正在努力解释这一点,但阅读我的代码应该会有所帮助

HTML:

<ul>
    <li><a href="javascript:testBrowser()" id="tumblr">z</a></li>
    <li><a href="javascript:testBrowser()" id="twitter">a</a></li>
    <li><a href="javascript:testBrowser()" id="insta">x</a></li>
</ul>
function testBrowser(){
    if(/Android|webOS|iPhone|iPod/BlackBerry/i.test(navigator.userAgent)){
        if($(this).attr('id') = "insta"){
            window.location = "instagram://user?id=xxxxxxxx";
        }
        else if($(this).attr('id') = "tumblr"){
            window.location = "tumblr://x-callback-url/blog?blogName=blogname";
        }
        else if($(this).attr('id') = "twitter"){
            window.location = "twitter://user?screen_name=handle";
        }
    }
    else{
        if($(this).attr('id') = "insta"){
            window.location = "http://www.instagram.com/id";
        }
        else if($(this).attr('id') = "tumblr"){
            window.location = "http://blogname.tumblr.com/";
        }
        else if($(this).attr('id') = "twitter"){
            window.location = "http://www.twitter.com/handle";
        }           
    }
}
我做错了什么


当前调用
testBrowser
的方法在全局对象上下文中执行它,即
窗口
。您可以这样更改HTML:

<a href="javascript:testBrowser.call(this)" target="_blank" class="socicon" id="tumblr">z</a>

以这种方式从
href
调用不会返回正确的
this
引用(它将引用
窗口
,而不是
锚定
)。可以通过编程方式向链接添加单击函数。jQuery只需一行就可以做到这一点。这实际上是首选的方式

$("li > a[id]").on("click", testBrowser);
这将选择锚定并添加
testBrowser
作为功能

其他改进:

  • 在if子句中使用了single
    =
    ,它们需要是double
    =
    或triple
    ==
    才能进行比较
  • 您的正则表达式包含一个错误,其中
    /
    必须是
    |
  • 我将
    hrefs
    更改为
    void(0)
    ,因此它们仍然充当链接,但实际上什么也不做
$(“li>a[id]”)。在(“单击”,测试浏览器);
函数testBrowser(){
if(/Android | webOS | iPhone | iPod | BlackBerry/i.test(navigator.userAgent)){
if($(this.attr('id')==“insta”){
window.location=”instagram://user?id=xxxxxxxx";
}
else if($(this.attr('id')==“tumblr”){
window.location=”tumblr://x-callback-url/blog?blogName=blogname";
}
else if($(this.attr('id')==“twitter”){
window.location=”twitter://user?screen_name=handle";
}
}
否则{
if($(this.attr('id')==“insta”){
window.location=”http://www.instagram.com/id";
}
else if($(this.attr('id')==“tumblr”){
window.location=”http://blogname.tumblr.com/";
}
else if($(this.attr('id')==“twitter”){
window.location=”http://www.twitter.com/handle";
}
}
}


href
调用不会返回正确的结果。您需要以编程方式将单击函数添加到链接中。您是否正在查看控制台以捕获错误?有几个问题你应该解决。您还可以使用JS控制台输出类似于
console.log(this)
的内容,以查看它不是正确的
this
。这正是我想要的!非常感谢!只有一件事:是否可以将链接设置为
target=“\u blank”
仍然?@Th3No0b,不可以,但您可以使用而不是
窗口。位置
。在新窗口中打开url。@Th3No0b是否正在使用控制台调试代码。因为您的原始代码有问题。dfsq的建议应该正常工作。正如我提到的,正则表达式中有一个语法错误。如果您不知道如何调出控制台:使用键盘
F12
,调出控制台。它会显示脚本错误。是的,我没有看到任何这样的错误。这个正则表达式错误不在我的实际代码中,我想这是我复制代码时的一个输入错误。你知道下面的解决方案很好!谢谢
$("li > a[id]").on("click", testBrowser);