javascript - 如何删除评估(javascript)
问题描述
由于 eval 性能不佳,我想知道是否有任何方法可以删除此代码中的 eval 用于其他一些代码。目标是能够通过函数创建 SVG 元素。当前的方法是使用 eval 来创建元素。
function createrect(createrectvar1 , createrectvar2 , createrectvar3 , createrectvar4 , createrectvar5 , createrectvar6 , createrectvar7 , createrectvar8 , createrectvar9 , createrectvar10 , createrectvar11) {
/** id , x , y , rx , width , height , fill , stroke , stroke w , svgid , onclick **/
if (createrectvar11 == "_") {
eval(createrectvar1 + " = document.createElementNS('http://www.w3.org/2000/svg', 'rect') ; " + createrectvar1 + ".setAttribute('x' , " + createrectvar2 + ") ; " + createrectvar1 + ".setAttribute('y' , " + createrectvar3 + ") ; " + createrectvar1 + ".setAttribute('rx' , " + createrectvar4 + ") ; " + createrectvar1 + ".setAttribute('width' , " + createrectvar5 + ") ; " + createrectvar1 + ".setAttribute('height' , " + createrectvar6 + ") ; " + createrectvar1 + ".setAttribute('fill' , '" + createrectvar7 + "') ; " + createrectvar1 + ".setAttribute('stroke' , '" + createrectvar8 + "') ; " + createrectvar1 + ".setAttribute('stroke-width' , '" + createrectvar9 + "') ; " + createrectvar10 + ".appendChild(" + createrectvar1 + ") ; ") ;
} else {
eval(createrectvar1 + " = document.createElementNS('http://www.w3.org/2000/svg', 'rect') ; " + createrectvar1 + ".setAttribute('x' , " + createrectvar2 + ") ; " + createrectvar1 + ".setAttribute('y' , " + createrectvar3 + ") ; " + createrectvar1 + ".setAttribute('rx' , " + createrectvar4 + ") ; " + createrectvar1 + ".setAttribute('width' , " + createrectvar5 + ") ; " + createrectvar1 + ".setAttribute('height' , " + createrectvar6 + ") ; " + createrectvar1 + ".setAttribute('fill' , '" + createrectvar7 + "') ; " + createrectvar1 + ".setAttribute('stroke' , '" + createrectvar8 + "') ; " + createrectvar1 + ".setAttribute('stroke-width' , '" + createrectvar9 + "') ; " + createrectvar1 + ".setAttribute('onclick' , '" + createrectvar11 + "()') ; " + createrectvar10 + ".appendChild(" + createrectvar1 + ") ; ") ;
}
}
解决方案
我看不出使用eval()
. 在这里,我有一个函数createRect()
将在 svg 元素中创建一个 rect 元素。
const createRect = (svgElm, id, height = 1, width = 1, fill = 'blue') => {
let rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
rect.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
rect.setAttribute('height', height);
rect.setAttribute('width', width);
rect.setAttribute('fill', fill);
rect.setAttribute('x', 0);
rect.setAttribute('y', 0);
svgElm.appendChild(rect);
};
let svg01 = document.getElementById('svg01');
createRect(svg01, 12, 100, 50);
<svg xmlns="http://www.w3.org/2000/svg" id="svg01"></svg>
推荐阅读
- ios - 类型“NSNotification.Name”没有成员“UITextField”
- java - Makefile 不工作:make:Nothing to be done for `all'
- bash - 我如何在 bash 中捕获 gitlab-runner 的输出
- python - 根据列值删除行 - 但不仅仅是一个列值 - 值列表
- dart - Flutter 按状态对 JSON 进行排序
- javascript - 窗口卸载时提交表单
- ios - Nativescript Angular
- javascript - TypeError:request.headers.entries 不是函数
- wordpress - 什么是 WordPress 的 Wix 中继器等价物?
- android - android通知图标显示奇怪