-2

我在这个奇怪的大杂烩代码中使用了一些 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”的不正确引用

4

3 回答 3

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/

于 2012-08-13T15:33:36.037 回答
1

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

这更短:

if(SELECTED_ELEMENT.indexOf(this) != -1)
    alert('yep');
else
    alert('nope');
于 2012-08-13T15:31:46.973 回答
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");
}
于 2012-08-13T16:36:25.423 回答