本文很明显,我们不应该使用eval()
。
https://24ways.org/2005/dont-be-eval
但是我没有实现建议的替代方法。
我正在做的一个简单版本:
var list = $('ul.plain-list li');
$('.search-filter button').each(function(){
var d = $(this).data('filter');
$(this).text(eval(d).length);
});
变量d
的值与一组其他变量的名称匹配,例如list
。我正在使用eval()
来将这两件事结合起来,这非常有效,但是看来我不应该这样做。
在不使用eval()
的情况下执行上述操作的正确方法是什么?
编辑:我不生成变量变量!看起来我可能正在使用数组或字典,但这似乎过于复杂,上面的代码运行得很好,而且非常轻巧。
Edit2:我当然很感谢答案,但是我在想的是,我对eval()
的用法是如此具体,只是一段静态HTML中的单个字符串,以致本文中提到了安全性问题。不相关。这公平吗?
Edit3:恐怕仍在为此挣扎。这是我的确切代码,如果有人可以重写它,我将非常感激。
var all = $('ul.plainList li');
var stories = $('ul.plainList li:not(.type-sjn)');
var sjn = $('ul.plainList li.type-sjn');
$('.search-filter button').each(function(){
var d = $(this).data('filter');
$(this).find('span').text(eval(d).length);
});
如果不清楚,data-filter
的值将与变量名all
,stories
,sjn
完全匹配。
代码执行的操作是获取不同类型帖子的计数,并将该计数插入与每种帖子类型相对应的按钮中。