使用JQuery对深层XML结构IE9进行迭代

Use JQuery to iterate over deep XML structure - IE9

本文关键字:IE9 迭代 结构 XML JQuery 使用      更新时间:2023-09-26

在JS中,我有一个带有以下XML的变量data

<data>
    <delivery>
        <checklist>Pre-Vehicle Check Bulk</checklist>
        <delivery>800056799</delivery>
        <shipment>105065995</shipment>
        <driverName>John Doe</driverName>
        <driverLanguage>NL</driverLanguage>
        <country>Belgium</country>
        <product>01248741</product>
        <productDescription>Metam 200%-33</productDescription>
        <location>P0204A</location>
    </delivery>
    <questions>
        <question>
            <id>Question-1</id>
            <driver>true</driver>
            <operator>true</operator>
            <isAnswered>false</isAnswered>
            <answer/>
            <options>
                <option>OK</option>
                <option>NOK</option>
                <option>NA</option>
            </options>
        </question>
        <question>
            <id>Question-2</id>
            <driver>true</driver>
            <operator>false</operator>
            <isAnswered>false</isAnswered>
            <answer/>
            <options>
                <option>OK</option>
                <option>NOK</option>
            </options>
        </question>
    </questions>
</data>

我正在基于这个XML创建一个JS对象。结果应该是一个包含问题的数组。每个问题都有其属性和一系列选项。因此,基本上与您在questions标签下的XML中看到的结构相同

以下是生成对象的JS代码:

var questions = [];
$(data).find("question").each(function(){
    var options = [];
    $(this).find("option").each(function(){
        options.push($(this).text());
    });
    questions.push({
        id : $(this).find("id").text(),
        driver : $(this).find("driver").text(),
        operator : $(this).find("operator").text(),
        isAnswered : $(this).find("isAnswered").text(),
        answer : $(this).find("answerswer").text(),
        title : $(this).find("title").text(),
        text : $(this).find("text").text(),
        text_driver : $(this).find("text_driver").text(),
        options : options
    });
});

现在的问题是没有添加选项。从调试器中,我可以看到在第一个.each之后,<option>标签被从当前节点this移除。因此其值为:

<options>OKNOKNA</options>

如何使用JQuery实现跨多个XML级别的循环?

EDIT:它似乎与IE9有关,我需要让它在这个特定的浏览器上工作。

我猜IE9认为这些是位于无效位置的HTML选项元素。

在将其传递给$之前,请使用jQuery.parseXML()对其进行解析。