不使用eval()从字符串执行jquery命令

时间:2014-09-11 13:00:06

标签: javascript jquery eval

我有这个jquery命令的javascript数组:

var a = ["$('div').hide();","$('span').show();","$('p').fadeIn(100);"];

我想执行,让我们说出数组中的第一个命令,但不使用

eval(a[0]);

有更好的方法吗?

感谢。

3 个答案:

答案 0 :(得分:3)

鉴于你的先决条件:不。

更好的解决方案是更改数组,使其包含函数而不是字符串。

var a = [
    function () {
        $('div').hide();
    },
    function () {
        $('span').show();
    },
    function () {
        $('p').fadeIn(100);
    }
];

a[0]();

答案 1 :(得分:2)

您还可以使用包含函数的对象

var a = {
    hideDiv: function () {
        $('div').hide();
    },
    showSpan: function () {
        $('span').show();
    },
    fadeinP: function () {
        $('p').fadeIn(100);
    }
}

像这样使用

a.hideDiv();
a.showSpan();
a.fadeinP();

DEMO

答案 2 :(得分:1)

这不是一种特别更好的方式,但方式不同:

// create a new script element
var elem = document.createElement("script");
elem.type = "text/javascript";
elem.innerHTML = a[0];

// add it to the document body so it gets executed
document.getElementsByTagName("body")[0].appendChild(elem);

但是,如果你可以选择使用不同的数据结构来开发并拥有功能而不是源代码,那么它就会变得更加容易和清晰:

var a = [
    function() { $('div').hide(); },
    function() { $('span').show(); }
    function() { $('p').fadeIn(100); }];
// invokation is clean
a[0]();