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

如何使用List.js在DataTable中搜索/排序IP地址

List.js表格IP地址搜索修复方案

问题描述

在DataTable中手动添加IP地址列后,显示正常但搜索功能异常:

  • 输入127时能匹配到包含该数字的IP行
  • 输入127.或完整IP127.0.0.1时,显示“无结果”

原因

List.js默认搜索逻辑将.视为正则表达式的特殊字符(匹配任意字符),而非字面意义的点号,导致无法正确匹配IP地址中的点分隔符。

解决方案

修改List.js的初始化配置,添加自定义搜索函数,转义正则特殊字符并处理HTML内容:

代码修改

找到原代码中的options对象,替换为以下内容:

options = {
    valueNames: ["id", "customer_name", "ip_address", "email", "date", "phone", "status"],
    page: perPage,
    pagination: !0,
    plugins: [ListPagination({
        left: 2,
        right: 2
    })],
    // 自定义搜索函数,处理正则特殊字符
    searchFunction: function(searchString, item) {
        // 转义所有正则特殊字符:. * + ? ^ $ { } ( ) | [ ] \
        const escapedSearch = searchString.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
        const matchRegex = new RegExp(escapedSearch, 'i'); // 不区分大小写

        // 遍历所有字段值,检查是否匹配
        return Object.values(item.values()).some(fieldValue => {
            // 处理带有HTML标签的字段(如status的badge),提取纯文本
            let plainText = fieldValue;
            if (typeof plainText === 'string' && plainText.includes('<')) {
                const tempElement = document.createElement('div');
                tempElement.innerHTML = plainText;
                plainText = tempElement.textContent || tempElement.innerText || '';
            }
            return matchRegex.test(plainText);
        });
    }
};

额外修正

同时修复refreshCallbacks函数中的笔误:将ipield.value = e._values.ip_address修改为ipField.value = e._values.ip_address,避免编辑时IP字段无法正确赋值。

效果验证

修改后:

  • 搜索127.能匹配所有以127.开头的IP地址
  • 搜索完整IP127.0.0.1能精准定位对应行
  • 其他字段(客户名、邮箱等)的搜索功能不受影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:11:07