我有一个将XML转换为“JSON”的脚本。可以使用styles.Default.FontName
(例如)访问可用数据。但是,我不需要在该行中手动插入“Default”,而是需要能够使用变量。我需要能够使用'styles.XXXX.XXXX'的许多不同组合。
这是我的脚本 function convertData(xml){
var styles = {}
$(xml).find('Style').each(function() {
var id = $(this).attr('ss:ID');
var name = $(this).attr('ss:Name');
var type = $(this).children();
var style = {};
styles[id] = style;
style['Name'] = name;
type.each(function() {
$.each(this.attributes, function() {
if (this.specified) {
style[stripPrefix(this.name)] = this.value;
}
});
});;
// You can now use 'styles.s57.FontName' and the like to return values :)
});
$(xml).find('Worksheet').each(function() {
var name = $(this).attr('ss:Name');
var data = $(this).find('Data');
data.each(function() {
var cell = $(this).parent('Cell');
var value = $(this).text();
var styleId = cell.attr('ss:StyleID');
$(window).load(function() {
// Here is my issue (see below for working calls...)
// This guy doesn't work (because of the 'styleId' variable not being an actual style id like 's57')
$('.testing').append('<span class="color:#f60;">' + styles.styleId.Color + '</span>');
});
});
});
$(document).ready(function() {
$('body').append('<div class="testing"/>');
// Works fine
$('.testing').html(styles.Default.FontName);
$('.testing').append(styles.s59.Bold);
$('body').append('<div class="json-output"/>');
$('.json-output').append(JSON.stringify(styles));
for (var i in styles) {
console.log(i);
}
});
}
那么,我怎样才能在这里使用变量而不是指定'Default'或's59'?非常感谢任何帮助!
澄清我的要求......
使用**styles.Default.FontName**
工作正常。我只需要能够用变量动态交换'默认'。为什么?因为我将使用这个迭代通过“Cells”的内部循环,每个循环都有不同的“StyleID”。上面通过data.each()显示了这个循环。因此,每次迭代,都可能会引用不同的“StyleID”。
但是当我使用styles.SomeVariable.SomeStyle
时,它不是插入我为' SomeVariable '设置的值,而是引用“SomeVariable”的JSON对象......
更新
供参考 - 生成的JSON
{
"Default":{
"Name":"Normal",
"Vertical":"Bottom",
"FontName":"Calibri",
"Family":"Swiss",
"Size":"11",
"Color":"#000000"
},
"s57":{
"Name":"Hyperlink",
"FontName":"Calibri",
"Family":"Swiss",
"Size":"11",
"Color":"#0066CC",
"Underline":"Single"
},
"s58":{
"Horizontal":"Left",
"Vertical":"Center",
"Indent":"1"
},
"s59":{
"Vertical":"Center",
"WrapText":"1",
"FontName":"Calibri",
"Family":"Swiss",
"Size":"11",
"Color":"#000000",
"Bold":"1"
}
}
答案 0 :(得分:1)
修改,更新
尝试用var styleId = cell.data('styleid');
代替var styleId = cell.data('styleID');
;因为data-*
属性名称转换为小写。
请参阅jquery get HTML 5 Data Attributes with hyphens and Case Sensitivity
注意,undefined
在s58
处返回,其中没有属性名称Color
。
jsfiddle http://jsfiddle.net/yao01h4b/10/
尝试
var name = "styleId"
, option = {};
option[name] = styles.s57;
var styleId = $.extend(styles, option);
// do stuff with `styles.styleId.s57`
document.write(styles.styleId.FontName);
var styles = {
"Default":{
"Name":"Normal",
"Vertical":"Bottom",
"FontName":"Calibri",
"Family":"Swiss",
"Size":"11",
"Color":"#000000"
},
"s57":{
"Name":"Hyperlink",
"FontName":"Calibri",
"Family":"Swiss",
"Size":"11",
"Color":"#0066CC",
"Underline":"Single"
},
"s58":{
"Horizontal":"Left",
"Vertical":"Center",
"Indent":"1"
},
"s59":{
"Vertical":"Center",
"WrapText":"1",
"FontName":"Calibri",
"Family":"Swiss",
"Size":"11",
"Color":"#000000",
"Bold":"1"
}
};
var name = "styleId"
, option = {};
option[name] = styles.s57;
var styleId = $.extend(styles, option);
document.write(styles.styleId.FontName)
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
&#13;
答案 1 :(得分:0)
使用与[]
符号
var someVal = object[variable];
您还可以组合记谱法类型
var someVal = object[variable][anotherVariable].someProperty;