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

jQuery.inArray()始终返回-1问题排查:移除不在ID数组中的元素

解决jQuery.inArray()始终返回-1的问题

嘿,我来帮你搞定这个头疼的问题!你遇到的$.inArray()一直返回-1,大概率是类型不匹配或者获取属性值的方式不对导致的,咱们一步步来排查和解决:

最常见的原因:类型不匹配

$.inArray()会严格匹配值和类型(和===的逻辑一致)。举两个典型场景:

  • 如果你的ID数组是[1, 24](数字类型),但按钮的data-functionID是字符串"j1_1"、"j1_24",那肯定匹配不上;
  • 要是你用$(this).data("functionID")获取值,jQuery会自动转换类型:比如属性值是纯数字"24"时,.data()会返回数字24,而如果你的数组里存的是字符串"24",这时候$.inArray()就会返回-1。

快速排查小技巧

先在遍历代码里加几个日志,看看值和类型是否一致,一眼就能找到问题:

var allowedIDs = ["j1_1", "j1_24"]; // 你的ID数组
$("[data-functionID]").each(function() {
  var funcID_attr = $(this).attr("data-functionID");
  var funcID_data = $(this).data("functionID");
  
  console.log("attr获取的值/类型:", funcID_attr, typeof funcID_attr);
  console.log("data获取的值/类型:", funcID_data, typeof funcID_data);
  console.log("数组第一个元素/类型:", allowedIDs[0], typeof allowedIDs[0]);
  console.log("inArray结果(用attr):", $.inArray(funcID_attr, allowedIDs));
});

正确的实现代码

方法一:用.attr()获取原始字符串(推荐)

直接用.attr("data-functionID")获取属性的原始字符串,避免自动类型转换的坑,再加上trim()处理可能的空格:

var allowedIDs = ["j1_1", "j1_24"];

$("[data-functionID]").each(function() {
  var $btn = $(this);
  var funcID = $btn.attr("data-functionID").trim();
  
  if ($.inArray(funcID, allowedIDs) === -1) {
    $btn.remove();
  }
});

方法二:更简洁的.filter()写法

用filter()筛选出不需要保留的元素,再一次性移除,代码更优雅:

var allowedIDs = ["j1_1", "j1_24"];

$("[data-functionID]")
  .filter(function() {
    var funcID = $(this).attr("data-functionID").trim();
    return $.inArray(funcID, allowedIDs) === -1;
  })
  .remove();

额外注意点

  • 检查数组里的ID和data-functionID是否完全一致:有没有多余的空格、大小写差异(比如数组里是"J1_1",属性值是"j1_1");
  • 如果你的ID是纯数字,要么统一用字符串类型(数组存"24",用.attr()获取),要么统一转成数字(数组存24,用.data()获取)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:28:58