2011-10-24 91 views
2

有沒有一種方法可以通過基於關鍵字的javascript或JQuery中的localStorage進行循環,而不是循環遍歷所有localStorage?我知道我可以做通過localStorage循環包含關鍵字

for (var i = 0; i < localStorage.length; i++)... 

但我寧願做這樣的事情

$.each('localStorage:contains("keyword")')... 
+0

你的意思是關鍵或值應該包含「關鍵字」? – pimvdb

+0

關鍵字應該包含在密鑰中。 – jmease

+0

我想我對這個[問題] [1]的回答可能是你要找的。 [1]:http://stackoverflow.com/q/8265078/1054225 – Dallas

回答

2

這不是直接可以使用DOM選擇仿製的對象。

你可以,但是,創建一個小功能可以過濾爲每一個傳遞函數:

Object.filter = function(obj, func) { 
    var res = {}; 

    for(var key in obj) { 
     // filter out own properties (not length) that pass the filter function 
     if(obj.hasOwnProperty(key) && key !== "length" && func(key, obj[key])) { 
      res[key] = obj[key]; 
     } 
    }; 

    return res; 
}; 

然後,你可以這樣做:

var filtered = Object.filter(localStorage, function(i, v) { 
               // Simply speaking, '~' is the 
               // same as checking for '!== -1' 
               return ~i.indexOf("keyword"); 
              }); 
$.each(filtered, function(i, v) { 
    // ... 
}); 

使用這種通用的功能,你可以建立更方便的功能如:

Object.keyContains = function(obj, contains) { 
    return Object.filter(obj, function(i, v) { 
     return ~i.indexOf(contains); 
    }); 
}; 

然後重複localStorage你想要的方式是一樣容易:

$.each(Object.keyContains(localStorage, "keyword"), function(i, v) { 
    // ... 
}); 
+0

這個技巧。很長的路要走,以避免一個For循環。 :) 非常感謝! – jmease

0

jQuery有一個InArray()方法,我想這就是你要找的 -

JQuery inArray

在你的情況下,你可能需要這樣的東西...

var index = jQuery.inArray(「keyword」,localStorage);

//你從需要使用localStorage的[指數]什麼這裏

+1

'localStorage'不是數組,因爲它有自定義鍵/值,而不是基於零的鑰匙索引。 – pimvdb

+0

仍然不是一個循環。可能有多個localStorage項目包含關鍵字 – jmease