【问题标题】:making shorter the source parsing xml in jquery在 jquery 中缩短源解析 xml
【发布时间】:2012-09-19 09:49:47
【问题描述】:

这是我从xml解析出来的,但是太长了。有谁知道如何使它更短? “charList()”的数字和“if”的结构发生了变化。

var charList1; var charList2; var charList3; var charList4; var charList5;

$.ajax({
    type: "get",
    url: "XMLFile1.xml",
    async: false,
    dataType: "xml",
    success: function (xml) {
        $(xml).find('list').each(function () {

            obj = $(this).find("title");

            if (obj.text() == "1") {
                charList1 = (obj.next().text());
            } else if (obj.text() == "2") {
                charList2 = (obj.next().text());
            } else if (obj.text() == "3") {
                charList2 = (obj.next().text());
            } else if (obj.text() == "4") {
                charList2 = (obj.next().text());
            } else if (obj.text() == "5") {
                charList2 = (obj.next().text());                
            }
        });
    }
});

【问题讨论】:

  • 也许使用switch。不会更短,但会更有效率。

标签: jquery xml parsing


【解决方案1】:

您似乎需要重新考虑您的数据结构(使用名称上带有数字后缀的并行标量或数组变量几乎肯定表明您确实应该使用像数组或对象这样的聚合结构)。副手,听起来你真的想要一个由obj.text() 的(数字)值索引的数组;像

var charList=[];
$(xml).find('list').each(function () {
  obj = $(this).find("title");
  if (obj>= "1" && obj <= "5") { // use your own sanity check
    charlist[parseInt(obj, 10)] = obj.next().text();
  }
}

但请注意,使 AJAX 调用同步很少是一个好主意(它会完全锁定浏览器直到完成,并且当您与另一个系统交谈时,您无法保证它会 完成)。如果你让它异步(这就是 AJAX 中的第一个 A 所代表的),你需要将 charlist 的累积值传递给回调,因为当你“失败”你的 AJAX 调用时它将不可用.

【讨论】:

  • 感谢您的回答。我刚开始学习Jquery。很难理解你给我的建议。我怎样才能将其更改为数组?我必须使用“charList(这里必须有数字)”,因为其他结构使用“charList”。因此,我必须从 Jquery 中声明 charList
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 2011-01-01
相关资源
最近更新 更多