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

让我先说这个问题,说可能有一个完全不同于我标题的解决方案,所以让我告诉你我完全是在追求什么。

基本上我有一系列的菜单链接。 所有链接中的href都存储jQuery函数,而不是URL(用于控制turn.js书籍脚本)。 所以其中一个href可能看起来像这样:

  

请求很简单…在菜单项的click()上我需要执行href的内容。 我的第一个想法是遍历每个链接并存储href的临时字符串,然后使用eval()但这看起来是我阅读的一个不好的选择。

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

如何使用onclick事件?

 Click me! 

或者,既然你正在使用JQuery,你可以.bind()事件:

   Click me! 

或者,由于您只能访问href属性,因此您可以执行此操作,这是一种简单的方法:

  Click me! 

这里有一些解决方案。 您可能希望使用像Backbone这样的东西来提供一些可以帮助您进行导航的路由器。

或者为了破解类似的东西,将每个href标记设置为指向一个新的#锚:

next page

然后将一个监听器附加到hashchange事件。 当事件触发时,用户已单击该链接。 然后访问哈希window.location.hash并将其用作函数的参数,该函数执行您需要它执行的操作。

 $(window).on('hashchange', function(event){ $('#primary').turn('page', window.location.hash.slice(1)); } 

由于window.location.hash包含#字符,因此slice就在那里。


编辑

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

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

我有类似的问题并解决了这个问题:

在您的脚本中,定义一个函数,如:

$.fn.DoSomething=function (MyOption){ window.alert(MyOption); };

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