阅读XML JS - jquery

时间:2013-07-15 01:05:55

标签: javascript jquery xml

目前我能读取XML的唯一方法是向“解析”函数添加函数,但我希望能够在该函数之外添加函数。当我单击匹配按钮时没有任何反应。虽然解析函数内部的函数有效。我看到大多数人使用“XML”而不是“文档”但是当我添加xml而不是文档时,我得到错误“ReferenceError:xml未定义”。

我想在解析函数之外的xml上运行函数。谢谢你的帮助。

JS

 $(document).ready(function(){
$.ajax({
    url: 'data.xml',
    dataType: "xml",
    success: parse,
    error: function(){alert("Error: Something wrong with XML");}
 });
 });

 function parse(document){
 $(document).find('Swatch').each(function(){
 alert($(this).attr('name'));
 });
 }

 $('#Match').on('click', function () {
 $(document).find('Swatch').each(function(){
 alert($(this).attr('name'));
 });
 });

XML

 <?xml version="1.0" encoding="UTF-8"?>
<Fabric>
        <Swatch name="2016" title="Ruby_Red" alt="Main" match="2004, 2005, 2020, 2026, 2035"></Swatch>
        <Swatch name="2004" title="Spring_Yellow" alt="Knits"></Swatch>
        <Swatch name="2005" title="Newport_Navy" alt="Knits"></Swatch>
        <Swatch name="2006" title="Light_Purple" alt="Knits"></Swatch>
        <Swatch name="2007" title="Royal_Blue" alt="Knits"></Swatch>
        <Swatch name="2008" title="Ruby_Red" alt="Knits"></Swatch>              
</Fabric>

2 个答案:

答案 0 :(得分:0)

我认为您可能忘记将文档传递给您的函数

试试这个

$('#Match').click(function(document){
$(document).find('Swatch').each(function(){
   alert($(this).attr('name'));
 });
});

答案 1 :(得分:0)

问题是document处理程序中的click引用了window.document对象。

document方法中的parse参数是该方法的本地参数,在退出该方法调用后将不存在。

这里的解决方案是创建一个包含xml引用的全局变量

$(document).ready(function(){
    $.ajax({
        url: 'data.xml',
        dataType: "xml",
        success: parse,
        error: function(){
            alert("Error: Something wrong with XML");
            xmldoc = undefined;
        }
    });
});

var xmldoc;
function parse(document){
    xmldoc = document;
    $(document).find('Swatch').each(function(){
        alert($(this).attr('name'));
    });
}

$('#Match').on('click', function () {
    $(xmldoc).find('Swatch').each(function(){
        alert($(this).attr('name'));
    });
});