【问题标题】:Check if ID exists, and then rename it检查ID是否存在,然后重命名
【发布时间】:2012-06-10 00:06:24
【问题描述】:

我正在尝试检测重复的 ID,

http://jsfiddle.net/HB7ev/10/

如果我理解正确:

if (id in dupeUIDCheck) 

检查id 的值是否在数组中:dupeUIDCheck,但是,似乎:

dupeUIDCheck[id] = true;

最后设置的实际上使检查工作。

它并没有真正看进去:

dupeUIDCheck = $(document).find('DIV')
            .map(function(){ return this.id || undefined})
            .toArray();

对于值,我首先调用。

我该如何解决这个问题?出于某种原因,我确实让它在我自己网站的一部分中工作,所以makeIdUnique() 似乎工作正常,但为什么在这个例子中没有呢? (可能是格式错误的数组?)

原来的函数是从上一个问题中派生出来的:Renaming duplicates in Javascript Array

【问题讨论】:

  • 为什么不修复格式错误的 html 而不是通过 jquery 修复它?
  • 因为在我的完整脚本中,DIV 是动态生成的,有时元素已经存在,但需要能够唯一标识它...

标签: jquery html duplicates


【解决方案1】:

@TrySpace

据我了解,“dupeUIDCheck”是一个常规数组。如果是这样,那么你需要使用 Array.prototype.indexOf 方法:

if (dupeUIDCheck.indexOf(id) != -1) {
 ...
}

这段代码“dupeUIDCheck[id] = true;”解决了这个问题,因为您在数组对象本身上定义属性,并且“in”运算符显然会确认存在这样的属性,但数组元素并非如此。 “in”运算符不会在数组元素中查找。

【讨论】:

    【解决方案2】:

    你可以使用

    $.inArray(id, dupeUIDCheck)
    

    dupeUIDCheck.indexOf(id);
    

    注意

    由于dupeUIDCheck是一个数组,所以要查找数组中的元素是否存在,需要使用indexOf().indexOf() 如果找到,则返回该数组中搜索元素的 index,如果未找到,则返回 -1$.inArray(value, array) 是与 .indexOf() 做类似工作的 jQuery 方法。


    那是

    function makeIdUnique(id) {
    
       if (dupeUIDCheck.indexOf(id) >= 0) {  // exists
         // your code
       } 
    
    }
    

    function makeIdUnique(id) {
    
       if ($.inArray(id, dupeUIDCheck) >= 0) {  // exists
         // your code
       } 
    
    }
    

    id in dupeUIDCheck 适用于 Object 喜欢

    var obj = {a: 'abc', b: 'def'};
    

    然后搜索可以使用的对象的属性

    if( 'a' in obj) {
    
    }
    

    【讨论】:

    • 其实这还没有解决,jsfiddle.net/HB7ev/13,它会追加新的,后缀为 lilke -1、-2 等。但仍有重复...
    • @TrySpace 您的问题是关于查找数组元素,我的回答就是关于此。您的评论是关于与您的问题无关的另一个问题。接受此答案并提出另一个问题
    猜你喜欢
    • 1970-01-01
    • 2013-05-19
    • 2012-04-18
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多