我最近不得不在我的个人项目上做类似的事情,但从未真正使用过我正在编写的功能,但这是我使用的代码:
function refactor() {
var array = jQuery.makeArray($('ul#remapped > li:not(.target)'));
var mappedArray = jQuery.map(array, function(i) {
var merged = $(i).find('ul.merge > li:not(.target) > span');
return {
column: $(i).children('span').text(),
merged: jQuery.map(jQuery.makeArray(merged), function(mi) { return { column: mi.innerText }; })
};
});
var xml = '<columns>';
jQuery.each(mappedArray, function(index, item) {
xml += '\n\t<column>';
xml += '\n\t\t<name>' + item.column + '</name>';
if (item.merged.length > 0) {
xml += '\n\t\t\t<merged>';
jQuery.each(item.merged, function(mindex, mitem) {
xml += '\n\t\t\t\t<name>' + mitem.column + '</name>';
});
xml += '\n\t\t\t</merged>';
}
xml += '\n\t</column>';
});
xml += '\n</columns>';
$('div#result').load('/Tools/Csv/Refactor', { mapping: xml });
}
基本上,用户会使用 UI 随意拖放来创建他们想要的结构。然后,他们单击执行此方法的按钮。
$('ul#remapped') 查询是包含新结构的元素(在我的代码中),然后我再次根据我的 DOM 结构进行了一些额外的查询,以从 DOM 中提取我需要的值并生成一个 XML 字符串,然后将其发布到服务器。
我确定这不是您所需要的,但我希望它足够接近,您可以根据需要对其进行修改。