查找所选项目是否在集合中

时间:2012-08-13 15:29:08

标签: javascript jquery

我在这个奇怪的代码大杂烩中使用了一些jquery和javascript。

var SELECTED_ELEMENT;  //this ends up being a JS array of ELEMENTS like the following line.
SELECTED_ELEMENT.push($(this).closest(".draggable"));
//Now i wanted to select stuff
$(".draggable").click(function(){
   var found = 0;
   for (var i = 0; i < SELECTED_ELEMENT.length; i++){
      if(SELECTED_ELEMENT[i] == this){
         found = 1;
      }
   }
   if(found == 1){
      alert("yep");
   }else{
      alert("nope");
   }
});
//this doesnt seem to do what i want.

现在的问题是,即使它确实存在,也永远不会真实。我只是想在javascript中找到一种搜索数组的方法。您会认为通过数组进行简单搜索可以解决问题,但可能是对“this”

的错误引用

3 个答案:

答案 0 :(得分:2)

有一些问题,例如int found = 0甚至不是javascript。然后,您将jQuery对象推送到数组,并将它们与dom元素进行比较。

改为推送元素:

var selectedElements = [],

    closest = $(this).closest(".draggable")[0];

if( closest ) {
    selectedElements.push( closest );
}

$(".draggable").click( function() {
    var index = selectedElements.indexOf(this);

    alert( index > -1 ? "yep" : "nope" );
});

演示:http://jsfiddle.net/sqj42/

答案 1 :(得分:1)

在第二行中,您有SELECT_ELEMENT而不是SELECTED_ELEMENT

这更短:

if(SELECTED_ELEMENT.indexOf(this) != -1)
    alert('yep');
else
    alert('nope');

答案 2 :(得分:0)

我找到的真正答案是:

我的搜索错了。它应该是:

var found = 0;
for(var i = 0; i < SELECTED_ELEMENT.length; i++){
   if ( this == SELECTED_ELEMENT[i][0] ){  //the key is the extra [0] as the stored element is a jquery object, so it needs to be de-referenced by selecting the object itself and not the jquery wrapper-thingy for it..
      found = 1;
   }
}
if(found == 1){
    alert("yep");
}else{
    alert("nope");
}