【问题标题】:How to filter xml data using jquery?如何使用 jquery 过滤 xml 数据?
【发布时间】:2012-10-23 04:48:50
【问题描述】:
  <Item id="419" rank="0.0000" date_added="2012-09-24T19:43:14" date_end="2012-10-15T19:43:14" uid="134333" price="  ,-" district="-1" district_text="Friend" cid="9" cid_text="Underholdning" img_height_thumb="433" />
  <Item id="418" rank="0.0000" date_added="2012-09-24T19:17:42" date_end="2012-10-15T19:17:42" uid="134332" price="  ,-" district="-1" district_text="Friend" cid="9" cid_text="Underholdning" img_height_thumb="254" />
  <Item id="405" rank="102.0000" date_added="2012-09-23T18:55:20" date_end="2012-10-14T18:55:20" uid="134331" price="  102,-" district="-1" district_text="Friend" cid="761" cid_text="Mote" img_height_thumb="280" />

这是示例 xml 数据。我正在使用此代码来获取 xml。

 xmlDoc = xmlhttp.responseXML;
 var items = xmlDoc.getElementsByTagName("Item");

//要添加代码

for (i = 0; i < items.length && i < 40; i++) {
var bRank = items[i].getAttribute("rank");
}

//想添加代码

我想过滤所有大于 0 的数据等级。 而且我只想在这个地方添加过滤器,这样我的其余代码就不会改变。 那么我如何过滤项目变量并在其他变量中获取过滤器值。所以循环不会生效。 我可以在 for 循环中更改变量的名称。

请给我任何建议。

首次编辑

xmlDoc = xmlhttp.responseXML;
        var items1 = xmlDoc.getElementsByTagName("Item");

        var items = $(items1).filter('Item').each(function () {
            var bRank = $(this).attr('rank');
            var tempRank = bRank.replace("0000", "").replace(".", "");
            if (tempRank > 0)
                return this;
        });

alert(items.length);
        alert(items1.length);

两个警报的答案都是 3。

但是对于第一个警报 1 和第二个警报 3,答案应该是这样的。

但每个警报我都得到相同的响应。 请检查并告诉我您的建议。 谢谢

【问题讨论】:

  • 请检查第一次编辑。

标签: jquery xml xml-parsing xmlhttprequest


【解决方案1】:

试试这个,

Live Demo

var items = $('item').filter(function(){
  if(parseFloat($(this).attr('rank')) > 0)
      return this;
});

for (i = 0; i < items.length && i < 40; i++) {
   var bRank = items[i].getAttribute("rank");
}

您需要将 xml 添加到 DOM 以对 xml 应用过滤器。之后你可以删除它。

Live Demo

$('#div1').html(xmlDoc); 
var items = $('#div1 item').filter(function(){
  if(parseFloat($(this).attr('rank')) > 0)
      return this;
});
$('#div1').remove();

for (i = 0; i < items.length && i < 40; i++) {
   var bRank = items[i].getAttribute("rank");
}

【讨论】:

  • 感谢您的回答,但在我的情况下它返回 0。
  • 我已经更新了我的答案,你需要把它放在 DOM 中才能得到结果。试一试。
  • 感谢您的回答。仍然为 0。我正在使用其他 js 文件。这是0的原因吗?
  • 您在获得响应的页面的 html 中是否有 div1,或者您在 div1 之后添加了其他元素?
  • 添加具有相同 id 的相同 div。
【解决方案2】:
var filteredArray = [];

for (i = 0; i < items.length && i < 40; i++) {
  if(parseFloat(items[i].getAttribute("rank"), 10) > 0) {
    filteredArray.push(items[i]);
  }
}

filteredArray 将包含所有带有rank &gt; 0 的项目。

【讨论】:

  • 感谢您的回答。我认为附加不起作用。你能检查一下并给我建议吗?
  • @PankajMishra 哎呀,对不起,这是.push 而不是.append。
  • 推送不起作用。如果我使用这个“filteredArray.push(items[i]);”然后我不能像那样使用 for 循环。我无法使用此代码“var bRank = items[i].getAttribute("rank");”。请检查并建议我。
  • @PankajMishra,你能发布你正在使用的确切完整代码吗?
  • for (i = 0; i
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
相关资源
最近更新 更多