我有一个名为'content'的字符串,其中包含HTML代码。当用户单击一个按钮时,div的innerHTML被设置为content的值,但是如果该字符串包含一个函数,我想执行它。
示例:
功能:
function state() {return "QLD";}
'content'字符串:
var content = "<div>Example text here</div><div><br></div><div>state()<br>/div>";
当前输出:
此处的示例文字
状态()
期望的输出:
此处的示例文字
QLD
答案 0 :(得分:0)
您可以使用eval()
功能。
eval("2 + 2"); // returns 4
当然,您必须弄清楚如何确定内容中的字符串是否包含函数以及如何获取该字符串。另外,请记住eval()
对用户内容是邪恶的(即可能是危险的)。
答案 1 :(得分:0)
你可以尝试在那里连接一个变量......然后像这样加载它
var UI = {
myLoad: () => {
alert("works!");
}
};
var myContent = "<span>" + UI.myLoad() + "</span>";
[已编辑]
var UI = {
myLoad: () => {
return "QLD";
}
};
var myContent = "<span>" + UI.myLoad() + "</span>";
myDv.innerHTML = myContent;
<div id='myDv'> </div>
答案 2 :(得分:0)
使用template literal(也是ECMAScript link),您可以:
function state(){return 'QLD'}
var content = `<div>Example text here</div><div><br></div><div>${state()}<br>/div>`;
console.log(content)
但我不知道对模板的支持是否足以达到您的目的。
答案 3 :(得分:0)
最新的惯例是使用模板文字(反引号)
save()
答案 4 :(得分:0)
您可以通过检查可能的功能来完成此操作。当您找到可能的函数时,尝试执行它并替换函数返回的内容。如果该函数不存在,那么只需替换为看起来像函数的函数。在这种情况下,您可以传递函数可能存在的范围,以防它在全局范围内不存在。
function checkFunctions(html, scope) {
return html.replace(/(\w+)\(\)/g, function(match, capture) {
try {
return scope[capture]();
} catch (e) {
return match;
}
});
}
function state() {
return "QLD";
}
var content = "<div>Example text here</div><div><br></div><div>state()<br></div>";
content = checkFunctions(content, this);
document.getElementById('foo').innerHTML = content;
&#13;
<div id="foo"></div>
&#13;
答案 5 :(得分:0)
你在哪里获得内容字符串?你能改变吗? 更好的设计是分割数据。这是一个例子......
echo '{ "html":"<div id='jsContent'></div>", "action":"state", "actionTarget":"jsContent" }';
如果内容来自ajax调用,那么让你的PHP或其他任何发送给你的JSON字符串
var content=JSON.parse(ajax.resonseText);
然后使用JSON.parse获取对象
window[content.action]();// all functions belong to the window unless you say other wise, replace window with wherever your function is if it is somewhere else
在这种情况下,您必须以不同方式调用此操作
dt <- data.frame(
N=letters[5:11],
a=c(0.01,0.05,0.1,0.5,1,5,10),
b=c(10,20,50,100,200,1000,2000))
dt.mlt <- melt(dt,variable.name="Cls",value.name="Val")
ggplot(dt.mlt,aes(x=N,y=Cls,fill=Val))+
geom_tile()+
scale_fill_gradient2(
low="green",high="red",mid="black",trans="log",breaks=c(0,0.01,0.1,1,10,100,1000))+
geom_text(data=dt.mlt,aes(x=N,y=Cls,label=Val))
答案 6 :(得分:0)
只需替换你的陈述
function state() {return "QLD";}
var content = "<div>Example text here</div><div><br></div><div>"+state()+"<br>/div>";