Мне недавно пришлось сделать нечто подобное в моем личном проекте, но я никогда не заканчивал тем, что использовал функцию, для которой писал, но вот код, который я использовал:
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 });
}
По сути, пользователь будет использовать пользовательский интерфейс для перетаскивания по своему усмотрению, чтобы создать желаемую структуру. Затем они нажимают кнопку, которая выполняет этот метод.
Запрос $ ('ul # remapped') - это элемент (в моем коде), который содержал новую структуру, а затем я сделал несколько дополнительных запросов, опять же, основываясь на моей структуре DOM, для извлечения значений, которые мне нужны DOM и сгенерировать строку XML, которая затем была отправлена на сервер.
Я уверен, что это не точно , что вам нужно, но я надеюсь, что это достаточно близко, чтобы вы могли изменить его для того, что вам нужно.