检查ID是否存在,然后重命名

时间:2012-06-09 15:54:27

标签: jquery html duplicates

我正在尝试检测重复的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

2 个答案:

答案 0 :(得分:2)

@TrySpace

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

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

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

答案 1 :(得分:1)

您可以使用

$.inArray(id, dupeUIDCheck)

dupeUIDCheck.indexOf(id);

注意

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


那是

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适用于对象,如

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

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

if( 'a' in obj) {

}