javascript - 使用 JSON 文件进行离线搜索

标签 javascript jquery html json

我正在制作一个 Estate 网站,该网站将处于离线状态。我已经完成了网站的大部分工作,但仍然坚持如何使用 JSON 进行搜索(我以前从未使用过 JSON)。我有这些搜索选项,用户可以在其中使用不同的选项搜索不同的属性。我知道如何将 JSON 文件与 html 链接,但不知道如何链接搜索按钮和 JSON 文件,因此当用户选择不同的选项时,他们可以根据他们的过滤器选项获得结果。搜索将再次离线。

link to code snippet of form and json file

表单代码片段

</form>
<h3>Find Your Property</h3>
 <fieldset>
 <label for="Type">Type:</label>   
 <select>
  <option>House</option>
  <option>Flat/Apartments</option>
  <option>Bungalow</option>
   <option>Land</option>

 <label for="Price Range">Price Range:</label>
  <select>
  <option>0</option>
     <option>50,000</option>
     <option>100,000</option>
     <option>150,000</option>
     <option>200,000</option>
  </select>

  to:
  <select>
  <option>50,000</option>
     <option>100,000</option>
     <option>150,000</option>
     <option>200,000</option>
     <option>250,000</option>
     <option>300,000 </option>
     <option>350,000 </option>
     <option>400,000 </option>
     <option>500,000 or more</option>
  </select>

    <label for="Bedroom">Bedroom(s):</label> 
  <select>
  <option>No min</option>
     <option>1</option>
     <option>2</option>
     <option>3</option>

  </select>
  <select>
     <option>No max</option>
     <option>1</option>
     <option>2</option>
     <option>3</option>
     <option>3</option>
  </select></fieldset>

    </fieldset><button Class="btn"type="button">Show me houses</button></fieldset>




                        </form>

对于 JSON 文件,请查看我发布的链接。

最佳答案

解决方案是过滤属性数组。假设您将有关属性的 javascript 对象存储在变量数据中,然后 data.properties 是一个属性数组,您可以根据类型、价格范围和卧室数量范围等选择标准过滤此数组。

为了简化 dom 操作,在解决方案中使用了 jquery。

var getProperties = function(type, minPrice, maxPrice, minBed, maxBed) {
    if (typeof minBed === "undefined") { minBed = 0; }
    if (typeof maxBed === "undefined") { maxBed = Number.MAX_VALUE; }

    return data.properties.filter(function (elem) {
        var expType = type.indexOf(elem.type) >= 0;
        var expPrice = elem.price >= minPrice && (maxPrice === Number.MAX_VALUE ? true : elem.price <= maxPrice);
        var expBedrooms = (maxBed === Number.MAX_VALUE) ? elem.bedrooms >= minBed : elem.bedrooms >= minBed && elem.bedrooms <= maxBed;
        return expType && expPrice && expBedrooms;
    });
}

$("#showHouses").click(function () {
    var type = $("#type").val();
    var minPrice = parseInt($("#minPrice").val().replace(",", ""));
    var maxPrice = $("#maxPrice").val().indexOf("more") >= 0 ? Number.MAX_VALUE : parseInt($("#maxPrice").val().replace(",", ""));
    var minBed = isNaN( parseInt($("#minBed").val()))? 0 : parseInt($("#minBed").val());
    var maxBed = isNaN(parseInt($("#maxBed").val())) ? Number.MAX_VALUE : parseInt($("#maxBed").val());

    var properties = getProperties(type, minPrice, maxPrice, minBed, maxBed);
    $("#placeHolder").text(JSON.stringify(properties));
});

DEMO in JSFiddle

关于javascript - 使用 JSON 文件进行离线搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27538435/

相关文章:

javascript - 只在第一页加载时工作,而不是在用户通过后退/前进时工作

javascript - 从 Jquery AJAX 调用返回响应

javascript - session 存储和性能

javascript - 将 localStorage 的内容显示到 div 中

javascript - .queue() 和 jquery.queue() 之间的区别

javascript - 无法将表单提交按钮重新设置为禁用

javascript - 使用 jQuery 更改浏览器中的后退按钮功能

javascript - 在 vis.js 中用最少的物理避免重叠边

javascript - Html 模式文本输入验证 ng-pattern ="/^-?[0-99]+(.[0-99]{0,2})?$/"

javascript - Fancybox 关闭 不工作