-2

我有一个具有不同嵌套 div 和输入(带值)的 DOM:

    <div id ="div_id1">
<div id ="div_id2">
    <table>
        <tr>
            <td>input 1:</td>
            <td><input id="i1" type="text"/></td>
        </tr>
        <tr>
            <td>input 2:</td>
            <td><input id="i2" type="text"/></td>
        </tr>
        <tr>
            <td>input 3:</td>
            <td><input id="i3" type="text"/></td>
        </tr>
    </table>
    <div id ="div_id3">
        <table>
            <tr>
                <td>input 4:</td>
                <td><input id="i4" type="text"/></td>
            </tr>
            <tr>
                <td>input 5:</td>
                <td><input id="i5" type="text"/></td>
            </tr>
        </table>
    </div>
</div>

如何根据这种结构递归地制作XML字符串?像这样:

<div_id1>
<div_id2>
    <i1>value 1</i1>
    <i2>value 2</i2>
    <i3>value 3</i3>
    <div_id3>
        <i4>value 4</i4>
        <i5>value 5</i5>
    </div_id3>
</div_id2>

升级版:

我试过这样的功能:

function makeXml(nodes) {
var $result = $('<' + nodes.attr('id') + '>');
$.each(nodes, function(i, node) {
    var nodeId = node.getAttribute('id');
    var $el = $('<' + nodeId + '>').text($('#' + nodeId).val());
    alert(nodeId + $('#' + nodeId).val());
    $el.appendTo($result);
    var $children = $(node).children();
    if ($children.length > 0) {
        makeXml($children).appendTo($el);
    }
});
return $result;

};

但它不能正常工作(不能正确处理嵌套的 div)。

有没有人有任何解决方案?

4

1 回答 1

0

选项之一(创建 XML 字符串):

var str = '';
function makeXml(obj) {
    var children = obj.children();
    if (children.size() != 0) {
        $.each(children, function(i, v) {
            var $val = $(v), id = $val.attr('id');
            if (typeof($val.attr('id')) !== "undefined") {
                str += '<' + id + '>' + $('#' + id).val();
                makeXml($val);
                str += '</' + id + '>';
            } else {
                makeXml($val);
            }
        });
    }
}
于 2013-05-07T11:08:40.067 回答