在不使用eval()的情况下从字符串执行jquery命令

Execute jquery command from a string without using eval()

本文关键字:情况下 字符串 执行 命令 jquery eval      更新时间:2023-09-26

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

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

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

eval(a[0]);

有更好的方法吗?

谢谢。

前提条件是:不。

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

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

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

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

像这样使用

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

DEMO

不是一种特别更好的方法,而是一种不同的方法:

// 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]();
相关文章: