在没有Eval的Javascript中执行字符串

Execute String In Javascript Without Eval

本文关键字:执行 字符串 Javascript Eval      更新时间:2023-09-26

我用eval做过,但我读到eval是邪恶的。所以我很好奇:没有eval()我怎么写这个?我已经尝试了一些样品,但它没有工作。没有eval是否有可能做到这一点,或者eval是唯一的方法?

$(".test").each(function(){
    var xyz = "";
    var w = $(this).last().attr("name");
    for(var i=0; i< (w-1);i++){
        var xyz = xyz + ".prev()";
    }
    var x = '$(this).first().parent()' + xyz;
    var y = x + '.find("td.one").attr("rowspan",'+w+');';
    eval(y);    
});

eval()不是邪恶的,它几乎总是错误的工作工具。例如,你的算法可以在完全不弄乱字符串的情况下实现,这样你就不需要考虑eval():

$(".test").each(function(){
    var w = $(this).attr("name");
    var el = $(this).parent();
    for(var i=0; i < w-1; i++){
        el = el.prev();
    }
    el.find("td.one").attr("rowspan", w);
});

还请注意,使用.last().first()是多余的,因为在.each()循环中,this将引用单个DOM节点。