2016-06-25 55 views
0

我想在每個keyup的json數據中搜索。如何使用jquery在json數據中搜索

JSON:

{ 
"AB01": { 
    "foo": "bar", 
    "ID": "A1", 
    "PID": "Z09", 
    }, 
    "AB10": { 
    "foo10": "bar10", 
    "ID": "B10", 
    "PID": "Y08", 
    }, 
} 

jQuery的

$('input').on('keyup', function(){ 
    $.getJSON("ABc.json", function(data) { 
    var InputVal = $('input').val(); 
    var myExp = new RegExp(InputVal, "i"); 

    var results = []; 

    $.each(data, function(key, obj){ 
     if (obj.foo.search(new RegExp(InputVal,"i")) != -1) { 
      results.push(obj); 
     }  
    }); 

    for(var i=0; i< $(results).length; i++) 
    { 
    console.log(JSON.stringify(results[i])); 
    } 
    }); 
}); 

HTML:

<input type="text" name="abc"> 


現在我想牛逼帽子input string\charon every keyup匹配json中的數據而不是fooID,但包含所有鍵和值。


我無法找到如何解決這個問題,任何幫助表示讚賞。
如果你想從我身邊的任何事情讓我知道:)


在此先感謝。

+0

您不需要爲每個關鍵事件獲取JSON,而是緩存它。 –

+0

好吧,但如何解決我的問題.. –

+0

你的問題是非常糟糕的陳述。你的問題實際上是遍歷對象屬性,爲此你可以使用'Object.keys(data)'(見這裏https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/對象/鍵)。 –

回答

0

您試圖對對象進行字符串比較。

您需要對這些對象的每個屬性進行內部迭代。

$.each(data, function(key, obj){ 
    var hasMatch = false; 
    // use any object property iteration approach to check each value 
    $.each(obj, function(key,val){ 
     if (val.search(new RegExp(InputVal,"i")) != -1) { 
      hasMatch = true; 
      return false; // break the loop, we have a match 
     } 
    }); 
    if(hasMatch){ 
     results.push(obj); 
    }    
}); 

還有其他的陣列的方法,如過濾器(),你可以使用,但我將它裝在相同的格式作爲當前代碼

另外請注意,您應該加載數據提前讓你不需要每次都請求它