不使用 Eval 执行 Javascript 中的字符串
Execute String In Javascript Without Eval
我用 eval
做到了,但我读到了 eval is evil。所以我很好奇:没有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 节点.
我用 eval
做到了,但我读到了 eval is evil。所以我很好奇:没有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 节点.