You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP商家列表数据获取简化与地域筛选实现方案咨询

解决方案:优化商家列表渲染与地域筛选功能

一、优化商家列表渲染代码

原代码存在冗余JS、重复ID、HTML语法错误等问题,以下是重构后的代码,保留展开逻辑同时大幅精简:

<?php if(is_array($fetchData)): ?>
    <div class="business-list">
        <?php foreach($fetchData as $data): ?>
            <div class="business" 
                 id="<?php echo $data['id'] ?? ''; ?>"
                 data-county="<?php echo $data['county'] ?? ''; ?>"
                 data-city="<?php echo $data['city'] ?? ''; ?>"
                 style="border: 1px solid #000; height: 100px; width: 400px; padding: 2px; overflow: hidden;">
                <div class="boxholder1">
                    <div class="box1">
                        <div class="titleLine">
                            <p><img class="brandlogo" src="image/logo.png" alt=""></p>
                            <p class="brandname"><?php echo $data['businessname'] ?? ''; ?></p>
                        </div>
                        <div class="datas">
                            <div class="list">
                                <p>County: <?php echo $data['county'] ?? ''; ?></p>
                                <p>CITY: <?php echo $data['city'] ?? ''; ?></p>
                                <p>Phone: <?php echo $data['phone'] ?? ''; ?></p>
                                <p>EMAIL: <?php echo $data['email'] ?? ''; ?></p>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        <?php endforeach; ?>
    </div>

    <!-- 全局JS,仅加载一次 -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script>
        // 统一处理所有商家盒子的展开/收缩
        $('.business').on('click', function() {
            const $this = $(this);
            // 切换高度与宽度
            const newHeight = $this.css('height') === '500px' ? '100px' : '500px';
            const newWidth = $this.css('width') === '800px' ? '400px' : '800px';
            $this.css({ height: newHeight, width: newWidth });
        });
    </script>
<?php else: ?>
    <p>No business data available.</p>
<?php endif; ?>

优化说明:

  • 移除每个商家盒子内的重复JS,改为全局绑定事件,减少代码冗余
  • 将重复ID(titleLine/datas/list)改为class,符合HTML规范
  • 新增data-county/data-city属性,存储地域信息,为筛选功能提供便捷数据来源
  • 修复HTML语法错误(闭合img标签、移除多余字符)

二、修复地域筛选功能

原筛选代码存在元素匹配错误、变量未定义、逻辑冗余问题,以下是修正后的实现:

1. 筛选下拉框HTML(需添加到页面合适位置)

<!-- 县/郡筛选下拉框 -->
<select id="dropdowncounty">
    <option value="">All Counties</option>
    <?php 
    // 从数据库获取不重复的县/郡选项示例
    if(is_array($countyOptions)):
        foreach($countyOptions as $county):
    ?>
        <option value="<?php echo $county; ?>"><?php echo $county; ?></option>
    <?php endforeach; endif; ?>
</select>

<!-- 城市筛选下拉框(可选) -->
<select id="dropdowncity">
    <option value="">All Cities</option>
    <?php 
    if(is_array($cityOptions)):
        foreach($cityOptions as $city):
    ?>
        <option value="<?php echo $city; ?>"><?php echo $city; ?></option>
    <?php endforeach; endif; ?>
</select>

2. 筛选逻辑JS(添加到全局JS中)

// 县/郡筛选
$('#dropdowncounty').on('change', function() {
    const selectedCounty = $(this).val().trim();
    
    $('.business').each(function() {
        const $business = $(this);
        const businessCounty = $business.data('county').trim();
        
        // 匹配选中值或显示全部
        if (selectedCounty === '' || selectedCounty === businessCounty) {
            $business.show();
        } else {
            $business.hide();
        }
    });
});

// 城市筛选(逻辑同县/郡)
$('#dropdowncity').on('change', function() {
    const selectedCity = $(this).val().trim();
    
    $('.business').each(function() {
        const $business = $(this);
        const businessCity = $business.data('city').trim();
        
        if (selectedCity === '' || selectedCity === businessCity) {
            $business.show();
        } else {
            $business.hide();
        }
    });
});

筛选代码说明:

  • 直接从当前下拉框获取选中值,避免元素查找错误
  • 利用data-*属性快速读取商家地域信息,无需解析DOM文本
  • 支持“全部”选项,点击后显示所有商家
  • 用trim()避免空格导致的匹配失败

三、进阶优化建议

  1. 样式分离:将内联样式移到CSS文件,添加过渡动画提升体验:
.business {
    border: 1px solid #000;
    height: 100px;
    width: 400px;
    padding: 2px;
    overflow: hidden;
    cursor: pointer;
    transition: all 0.3s ease;
}
  1. 后端优化:

    • 数据量大时,改用分页/滚动加载,避免全量加载导致页面卡顿
    • 支持后端筛选:通过AJAX传递筛选参数,后端返回匹配数据,提升性能
    • 下拉框选项从数据库查询SELECT DISTINCT county FROM businesses,避免手动维护
  2. 事件委托:若动态加载商家,改用事件委托绑定点击事件:

$('.business-list').on('click', '.business', function() {
    const $this = $(this);
    const newHeight = $this.css('height') === '500px' ? '100px' : '500px';
    const newWidth = $this.css('width') === '800px' ? '400px' : '800px';
    $this.css({ height: newHeight, width: newWidth });
});

内容的提问来源于stack exchange,提问作者user21286126

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:55:21