Javascript 如何在没有eval()的情况下执行存储为字符串的函数

Javascript 如何在没有eval()的情况下执行存储为字符串的函数,javascript,jquery,Javascript,Jquery,让我在开始这个问题之前说,可能有一个完全不同于我的标题的解决方案,所以让我告诉你我完全想要什么 基本上我有一系列的菜单链接。所有链接中的href都存储jQuery函数,而不是URL(用于控制书本脚本)。因此,href中的一个可能如下所示: <li id="menu-item-68" class="home menu-item menu-item-type-custom menu-item-object-custom menu-item-68"> <a href="$('#p

让我在开始这个问题之前说,可能有一个完全不同于我的标题的解决方案,所以让我告诉你我完全想要什么

基本上我有一系列的菜单链接。所有链接中的
href
都存储jQuery函数,而不是URL(用于控制书本脚本)。因此,
href
中的一个可能如下所示:

<li id="menu-item-68" class="home menu-item menu-item-type-custom menu-item-object-custom menu-item-68">
  <a href="$('#primary').turn(‘page’,1);"></a>
</li>
  • 请求很简单…在菜单项的
    上单击()
    ,我需要执行
    href
    的内容。我的第一个想法是运行每个链接并存储一个临时字符串
    href
    ,然后使用
    eval()
    ,但从我读到的内容来看,这是一个不好的选择


    那么,我如何快速安全地执行我的
    href
    的内容呢?

    在这种情况下,你不能简单地模拟链接上的点击事件吗?换句话说,如果已经加载了jquery
    $(“标识符”)。请单击()。在您当前的场景中,这似乎是最简单的方法。

    这里有一些解决方案。您可能想研究使用类似的东西,它提供了一种称为路由器的东西,可以帮助您进行导航

    或者,要创建类似的内容,请将每个
    href
    标记设置为指向新的
    #
    锚定:

    然后将侦听器附加到
    hashchange
    事件。当事件激发时,用户已单击链接。然后访问hash
    窗口.location.hash
    ,并将其用作函数的参数,该函数可以执行您需要它执行的操作

    $(window).on('hashchange', function(event){
        $('#primary').turn('page', window.location.hash.slice(1));
    }
    
    切片
    窗口开始就存在。location.hash
    包含
    #
    字符


    编辑


    我注意到你更新说你使用wordpress,你正在编辑你的URL的
    http://
    部分。如果您正在使用
    hashchange
    事件,则不需要更改,因为
    href=“#2”
    href=”相同http://mysite.post.com/this_post/#2“

    我遇到了一个类似的问题,并这样解决了它:

    在脚本中,定义如下函数:

    $.fn.DoSomething=函数(MyOption){
    窗口报警(MyOption);
    };


    在链接href中调用函数,如
    javascript:$.fn.DoSomething('Hello')

    如何使用onclick事件

    <a onclick="function(){$('#primary').turn('page', 2); return false;}" href="#">Click me!</a>
    
    或者,由于您只能访问
    href
    属性,因此可以这样做,这是一个简单的解决方法:

     <a href="javascript:$('#primary').turn('page', 2)">Click me!</a>
    
    
    
    你能把你的代码贴出来吗?这要看情况而定。href的内容是您提供的还是用户提供的?因为如果你能控制内容,eval可能不是一个坏的选择。
    让我先回答这个问题,说可能有一个与我的标题完全不同的解决方案,所以让我告诉你我想要的是什么。
    那么这是一个糟糕的标题。它也不需要标签。我添加了Wordpress生成的链接。请注意,Wordpress在所有内容之前添加了“http://”,因此使用jQuery,我特意从每个href中删除了该内容。如果通过jQuery触发链接,href属性中的代码将不会执行。我应该指出,
    hashchange
    有一些浏览器支持警告,因此您可能需要采取一些措施来处理该问题。如果你用谷歌搜索一下,你就会明白我的意思了。此外,如果你对以后的浏览器不感兴趣,你可以随时查看历史导航API…这在Firefox中似乎没有任何作用。不幸的是,我无法继续尝试这种方法,因为我不得不破解菜单并做一些不同的事。下面的解决方案适用于我的新场景。谢谢你的帮助,我从来都不知道
    hashchange()
    函数,它看起来很整洁。这看起来很棒,只是我不能给我的链接添加属性,因为它是Wordpress做的。我的意思是-我可以,但我不想攻击核心。当然,尝试一下(是的,我想到了:)Wordpress不喜欢,在保存链接之前完全删除它!因此,无论如何,我可能会使用这种方法,因为我在菜单中发现了另一个不相关的大缺陷。我现在需要创建一个有点静态的菜单,这应该可以做到,我会很快让你知道。这非常有效!不过,我编辑了您的
    .bind()
    示例,因为href是一个散列,您添加了一个自定义属性,所以代码在技术上不起作用。
     <a href="javascript:$('#primary').turn('page', 2)">Click me!</a>