javascript:layui实现定位、查询数据以及select筛选的组合功能

在这里插入图片描述

项目说明

  1. layui前端UI,实现三个select筛选;
  2. 百度实时定位实现经纬度的获取和地址获取;
  3. 关键词搜索;

解决方案

关键词搜索

        $("#search_btn").click(function () {
            var keys = $("#keys").val();
            var lnglat = $("#lnglat").val();
            //筛选数据;
            getLocalData(lnglat, keys, "", "", "");
        })

自动定位

//自动定位;
        function bdGeo() {
            var geolocation = new BMap.Geolocation();
            geolocation.getCurrentPosition(function (r) {
                if (this.getStatus() == BMAP_STATUS_SUCCESS) {
                    //console.log(r.address);
                    $("#local").html("当前位置:" + r.address.province + r.address.city + r.address.district + r.address.street);
                    $("#lnglat").val(r.point.lng + "," + r.point.lat);
                    //获取列表;
                    getLocalData(r.point.lng + "," + r.point.lat, "", "", "", "");
                } else {
                    alert('failed' + this.getStatus());
                }
            }, function (error) {
                console.log(error);
            }, {
                enableHighAccuracy: true,
                timeout: 1000,
                maximumAge: 0
            });
        }

select筛选数据

layui Html

三组select筛选关键代码: lay-filter="mixSelect"

  <div class="weui-panel__bd">
            <form class="layui-form">
                <div class="layui-inline" style="width: 32%;margin-left: 1%;">
                    <select name="poi_category" id="poi_category" lay-filter="mixSelect">
                        <option value="">--医院级别--</option>
                        <option value="三级特等">三级特等</option>
                        <option value="三级甲等">三级甲等</option>
                        <option value="三级乙等">三级乙等</option>
                        <option value="三级丙等">三级丙等</option>
                        <option value="二级甲等">二级甲等</option>
                        <option value="二级乙等">二级乙等</option>
                        <option value="二级丙等">二级丙等</option>
                        <option value="一级甲等">一级甲等</option>
                        <option value="一级乙等">一级乙等</option>
                        <option value="一级丙等">一级丙等</option>
                    </select>
                </div>
                <div class="layui-inline" style="width: 32%;">
                    <select name="poi_type" id="poi_type" lay-filter="mixSelect">
                        <option value="">--医院性质--</option>
                        <option value="公立">公立</option>
                        <option value="私立">私立</option>
                    </select>
                </div>
                <div class="layui-inline" style="width: 32%;">
                    <select name="poi_distance" id="poi_distance" lay-filter="mixSelect">
                        <option value="">--附近--</option>
                        <option value="1">1千米内</option>
                        <option value="3">3千米内</option>
                        <option value="5">5千米内</option>
                        <option value="10">10千米内</option>
                    </select>
                </div>
            </form>
        </div>

layui获取数据

    layui.use(['form'], function () {
        $ = layui.jquery;
        var form = layui.form;

        form.on('select(mixSelect)', function (data) {
            var poi_category = $("#poi_category").val();
            var poi_type = $("#poi_type").val();
            var poi_distance = parseInt($("#poi_distance").val());
            if (!poi_distance) {
                poi_distance = listDistance / 1000
            }
            console.log(poi_distance);
            var keys = $("#keys").val();
            var lnglat = $("#lnglat").val();
            //筛选数据;
            getLocalData(lnglat, keys, poi_category, poi_type, poi_distance)
        });
    });

查询和筛选数据

    /*加载附近数据*/
    function getLocalData(lnglat, keys, poi_category, poi_type, poi_distance) {
        $.ajax({
            url: 'api/api.php?act=getDistance&token=3cab7ce4142608c0f40c785b5ab5ca24',
            async: true,
            type: 'get',
            data: {
                lnglat: lnglat,
                keys: keys
            },
            dataType: "json",
            success: function (res) {
                //console.log(res.data);
                /*过滤数据*/
                var newData = [];
                if (poi_category || poi_type || poi_distance) {
                    newData = filterData(res.data, poi_category, poi_type, poi_distance);
                } else {
                    newData = res.data;
                }
                var listHtml = '';
                for (var i = 0; i < newData.length; i++) {
                    listHtml += "<div class=\"weui-panel weui-panel_access\">"
                        + "<div class=\"weui-panel__hd\">" + newData[i].poi_category + "  " + newData[i].poi_type + "</span></div>"
                        + "<div class=\"weui-panel__bd\">"
                        + "<a href=\"javascript:\" class=\"weui-media-box weui-media-box_appmsg\">"
                        + " <div class=\"weui-media-box__hd\"><img class=\"weui-media-box__thumb\" src=\"" + newData[i].poi_img + "\" alt=\"\"></div>"
                        + "<div class=\"weui-media-box__bd\">"
                        + "<div class=\"weui-media-box__title hosTitle\">" + newData[i].poi_name + "</div>"
                        + "<div class=\"weui-media-box__desc\">" + limitWords(newData[i].poi_content, 50) + "</div>"
                        + "<div class=\"weui-media-box__desc2 layui-icon layui-icon-location\"> " + newData[i].poi_address + "</div>"
                        + "<div class=\"weui-media-box__desc2 layui-icon layui-icon-cellphone\"> " + newData[i].poi_telephone + "</div>"
                        + "</div></a>"
                        + "<div class=\"weui-media-box weui-media-box_text\">"
                        + "<ul style=\"padding-bottom:10px;float: right;\">"
                        + "<li class=\"weui-media-box__info__meta layui-icon layui-icon-find-fill\" style=\"font-size: 13px;\"> " + newData[i].poi_distance + "km <a href=\"//api.map.baidu.com/geocoder?location=" + newData[i].poi_lat + "," + newData[i].poi_lng + "&coord_type=bd09ll&output=html&src=lockdatav\">导航到这里</a></li>" +
                        "<a href=\"" + newData[i].poi_url + "\"><li class=\"weui-media-box__info__meta weui-media-box__info__meta_extra layui-icon layui-icon-link\" style=\"font-size: 13px;\"> 详情链接</li></a>" +
                        "</ul></div></div></div>"
                }
                $("#infoList").html(listHtml);
            },
            error: function (err) {
                console.log(err + "请求数据失败!");
            }
        });
    }

JSON数据过滤

/*数据筛选
* data, 过滤数组
* poi_category, 等级
* poi_type, 性质
* poi_distance,距离
* */
function filterData(data, poi_category, poi_type, poi_distance) {
    //console.log(typeof(poi_distance));
    var filters = [
        o => o.poi_category.toString().includes(poi_category),
        o => o.poi_type.toString().includes(poi_type),
        o => o.poi_distance < poi_distance
    ];

    var result = data.filter(o => filters.every(fn => fn(o)));
    return result;
}

@lockdata.cn

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
layui是一款基于JavaScript的前端UI框架,它提供了丰富的组件和功能,方便开发者在Web页面中构建交互性强、界面美观的前端应用程序。 在layui中,对列表数据进行筛选比较常用的是数据表格组件(table),它可以展示数据并支持分页、排序和筛选功能。下面以数据表格的筛选为例,简要介绍layui如何进行数据筛选: 首先,我们需要引入layui的相关文件,包括样式文件和JavaScript文件。然后,在HTML中创建一个表格容器,可以使用div标签,设置一个id用于后续的初始化。 接着,在JavaScript代码中进行数据表格的初始化,通过layui.table.render()函数指定表格的id和数据等参数。在数据参数中,我们需要提供表头和列表数据,可以通过一个包含表头和数据的数组对象进行传递。 在数据表格初始化之后,我们可以通过layui.table.on()函数绑定一些事件,比如筛选事件(filter),通过监听筛选的条件,可以在筛选过程中进行数据的过滤操作。 具体来说,我们可以在监听筛选事件的函数中,通过获取筛选条件,再遍历列表数据,根据条件进行数据筛选,最后通过layui.table.reload()函数重新渲染表格显示筛选后的数据。 需要注意的是,在筛选条件和数据筛选过程中,我们可以使用layui的一些工具函数来简化操作,比如lay.extend()函数用于合并两个对象等。 综上所述,layui通过数据表格组件提供了方便的数据筛选功能,可以帮助开发者在Web页面中对列表数据进行灵活的筛选操作。当然,layui还提供了其他组件和功能,如下拉框组件(select)、搜索框组件(input)等,也可以用于数据筛选需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漏刻有时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值