在javascript中执行动态创建的代码
在javascript中,我创建了一个特定的命令:在javascript中执行动态创建的代码,javascript,jquery,Javascript,Jquery,在javascript中,我创建了一个特定的命令: arrSetContentCommands.push( "$('#titel"+i+"').trumbowyg('html', \""+data[i].value+"\");";`) 这使我能够在浏览器中使用html编辑器。它需要使用的id也会被创建,因为它取决于数据库中的内容。 如何执行此操作?所有命令都放在一个数组中。解决方案是:不要创建代码字符串并将它们放在数组中。只需执行以下代码: $('#titel'+i).trumbowyg('
arrSetContentCommands.push( "$('#titel"+i+"').trumbowyg('html', \""+data[i].value+"\");";`)
这使我能够在浏览器中使用html编辑器。它需要使用的id也会被创建,因为它取决于数据库中的内容。
如何执行此操作?所有命令都放在一个数组中。解决方案是:不要创建代码字符串并将它们放在数组中。只需执行以下代码:
$('#titel'+i).trumbowyg('html', data[i].value);
如果这些元素还不存在,请在它们存在时稍后运行此代码,或者如果由于某种原因您以后无法访问数据
,请构建一个函数数组:
arrSetContentCommands.push(function(index, value) {
$('#titel'+index).trumbowyg('html', value);
}(i, data[i].value));
……及以后:
arrSetContentCommands.forEach(function(command) {
command();
});
请注意,我们在推送的函数中不使用i
或data[i]
;看看为什么不
如果有充分的理由执行字符串中的代码,可以通过
新函数(…)()
执行,如下所示:
arrSetContentCommands.forEach(function(command) {
new Function(command)();
});
但是在非常、非常、非常少的情况下,这是合适的,而且显然永远不会用你不信任的代码来做。为什么你要在数组中构建代码字符串而不仅仅是执行代码呢?在这个例子中,我使用@t.J.Crowder,但是你可以使用
eval()
,我不建议这样做。@AchielVolckaert:这并不能回答这个问题。@AchielVolckaert:不,你为什么要构建代码字符串而不仅仅是执行代码?问题中没有任何理由表明你不能根据数据库的结果在循环中进行这些调用。如果您告诉我们您真正想做什么,我们可能会以比使用代码字符串更好的方式帮助您完成。我不能只是执行代码,因为他们需要访问的元素当时还没有创建。@AchielVolckaert:然后等它们创建好,或者将函数放入数组中。在字符串中构建代码(几乎)永远不是答案。@AchielVolckaert:我添加了一个将函数放入数组的示例,但实际上,我只保留数据,然后在元素存在时执行循环。