我如何解析一个脚本标签,并得到一个变量在它里面,而不使用eval()
How can I parse a script tag, and get a variable inside of it, without using eval()?
我有一个生成此代码的页面MULTIPLE times (字段数组的内容不同):
<script language="javascript">
try {
var fields = Array();
fields = {id:1,type:text,value:banana};
fields = {id:2,type:text,value:apple};
fields = {id:3,type:number,value:10};
}
</script>
然后我有一个访问字段数组的函数:
function functionName(fieldId){
var allFields = eval('fields');
if (allFields) {
for ( var i = 0; i < allFields.length; i++) {
var field = allFields[i];
if(field.id == fieldId){
return field;
}
}
}
return null;
}
问题是,我想在多个地方使用这个函数,访问不同脚本标签的字段数组。现在,该函数总是只获取第一个脚本标记,我需要能够将其范围限定为特定的脚本标记。
由于我不能更改生成数组的实际函数,因此我可以更改脚本标记的ID,如下所示:
<script language="javascript" id="uniqueID">
try {
var fields = Array();
.....
}
</script>
现在我把函数改成这样:
var script = document.getElementById(uniqueID);
function functionName(fieldId){
var allFields = eval('fields'); // now here...how do I scope this by using the script var that I've created above?
....
}
那么,我怎么能范围我的allFields var到一个特定的脚本标签?
这很粗糙,但是您可以使用正则表达式来解析script
块,假设它总是以相同的格式生成它。
function functionName(scriptID, fieldID) {
var lines = $('#' + scriptID).text().split(''n')
var result;
$.each(lines, function(i, e) {
var match = e.match(/field = ('{.*'})/);
if (match) {
var obj = eval(match[1]);
if (obj.id == fieldID) {
result = obj;
return false; // Tell `$.each` to stop
}
}
}
return result;
}
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- jQuery:循环一个具有不同超时值的循环
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 从javascript创建一个列表
- 节点导出返回一个空对象
- 使用clickToggle并在单击另一个元素时关闭元素
- 我可以在json对象中添加一个函数吗
- 如何在 jQuery 中使用 eval 从不同的文件调用另一个函数
- 如果定义了值,为什么会得到一个未定义的值?使用 eval()
- 是否可以通过添加新参数而不使用 eval 将所有这三个函数合并为一个函数
- eval(“{}”) vs eval (“x={}”),一个返回 undefined,而另一个返回 {}
- 你如何让 javascript eval 返回一个字符串而不是一个变量
- 制作一个不带eval()的动态变量,该变量对应于一个数组
- 必须创建一个简单的计算器,使用eval()进行计算.我可以'我不知道如何把答案发到文本框里
- Jquery eval一个javascript文件
- 我如何解析一个脚本标签,并得到一个变量在它里面,而不使用eval()
- 递归地找到一个数字's位的和w/ RegEx和w/o Eval()
- 在不使用eval()的情况下从另一个JavaScript文件调用函数
- 这是javascript eval的一个好用途吗
- Javascript,又一个“太多的递归”问题:复仇的邪恶eval()