按id json,jquery选择元素

时间:2015-03-17 17:39:19

标签: javascript jquery json

我有一个问题,女巫只选择一个元素。我在adres URL中发送了两个参数id类和id course。当我在第一个课程中点击时,我有id = 1,id = 1。如何使用id

选择项目
[
    {
        "id": 1,
        "name": "Tytu³",
        "isNew": true,
        "description": "Opis dzia³u",
        "courses": [
            {
                "id": 1,
                "isNew": true,
                "price": 120,
                "time": 50,
                "assumptions": "Assumption 1",
                "knowledge": "Wiedza",
                "domainId": 1,
                "programs": [

这是关于jQuery的问题

var idKategori = $.urlParam('idkat');
var idKursu = $.urlParam('id');

      $.getJSON('http://tommagisterka.apphb.com/api/Domains', function(response) {

      }); 

  });

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题。您可以编写一些脚本来遍历外部内部数组中的每个项目,并检查每个项目的密钥。还有一些库可用于提取您感兴趣的部分而无需编写大量代码。

首先,如果您想自己编写代码,您可以执行以下操作:

function findCourse(json, idKategori, idKursu) {

    for (var i = 0; i < response.length; i++) {
        var kategori = response[i];

        if (kategori.id == idKategori && kategori.courses) {
            for (var j = 0; j < kategori.courses.length; j++) {
                var kursu = kategori.courses[j];
                if (kursu.id == idKursu) {
                    return kursu;
                }
            }
        }
    }
}

var idKategori = $.urlParam('idkat');
var idKursu = $.urlParam('id');

  $.getJSON('http://tommagisterka.apphb.com/api/Domains', function(response) {
        var course = findCourse(response, idKategori, idKursu);
  }); 

这是相当多的代码。有一些库可以使这更简单。 JSON路径(http://goessner.net/articles/JsonPath/)和Lodash(https://lodash.com)只是两个例子。

使用JSON Path你可以这样做:

var idKategori = $.urlParam('idkat');
var idKursu = $.urlParam('id');

  $.getJSON('http://tommagisterka.apphb.com/api/Domains', function(response) {
        var course = jsonPath(response, "$[?(@.id==" + idKategori + ")].courses[?(@.id==" + idKursu + ")]")[0];
  });

传递给JSON Path的参数是$[?(@.id==1)].courses[?(@.id==1)],它基本上说,找到我在数组中第一个id等于1的项目,然后在那个id下等于1的第一个项目。注意JSON路径总是返回一个数组,因此最后是[0]

请参阅此处的工作示例: http://www.jsonquerytool.com/sample/jsonpathmultilevelfilter

如果您使用Lodash,它将会是这样的。

var idKategori = $.urlParam('idkat');
var idKursu = $.urlParam('id');

  $.getJSON('http://tommagisterka.apphb.com/api/Domains', function(response) {
    var course = _(response).chain()                // Setup the response for chaining multiple filters
        .where(function (x) { return x.id == idKategori; })  // Select the category with id of idKategori
        .first()                                             // Take the first item in the result array
        .result('courses')                                   // Get the courses property from the category object
        .where(function (x) { return x.id == idKursu; })     // Get the course with id of idKursu in the course array
        .first()                                             // Get the first item in the result array
        .value();                                            // Get the output from the lodash query

  });

请参阅此处的工作示例: http://www.jsonquerytool.com/sample/lodashmultilevelfilter