jQuery和XML,查找包含具有多个特定值的子代的对象

时间:2019-05-23 17:57:10

标签: javascript jquery xml

对于一个项目,我将数据存储在XML中,如下所示:

<xml>
    <sprites>
        <sprite>
            <name>Tile1</name>
            <lat>1</lat>
            <lng>2</lng>
        </sprite>
        <sprite>
            <name>Tile2</name>
            <lat>3</lat>
            <lng>4</lng>
        </sprite>
    </sprites>
<xml>

通过jQuery,我想获取一个与两个子值lat和lng值匹配的tile对象。

I found this post很有帮助,但可悲的是,它只有一个示例,说明如何搜索一个匹配值。这是我到目前为止的代码:

// xml stored in 'xml' var

var findLat = 3;
var findLng = 4;

var mapSprites = $(xml).find("sprites");

var getSprite = $(mapSprites).find("sprite").filter(
    function() {
        return $(this).find('lat').text() == findLat;
    },
    function() {
        return $(this).find('lng').text() == findLng;
    }
);

可悲的getSprite是未定义的,因为我想您无法使用过滤器函数,因为我尝试使用它?我链接到的示例具有一个过滤器功能,并且似乎可以工作,但是逗号分隔似乎不能作为AND来工作,这正是我所需要的。

目标是能够为函数提供lat和lng值,而我能够提取<name>值。

要感谢朝着正确方向发展,我对XML并通过jQuery解析它还很陌生。

1 个答案:

答案 0 :(得分:2)

filter不接受多个参数。因此,请使用“和”将其合并为一个。

var findLat = 3;
var findLng = 4;

var mapSprites = $(xml).find("sprites");
var getSprite = mapSprites.find("sprite").filter(
  function() {
    const node = $(this);
    return Number(node.find('lat').text()) === findLat &&
      Number(node.find('lng').text()) === findLng;
  }
);