[英]Jquery, using “inarray” on a nested array to find a specific value's index?
[英]jQuery - using inArray() to find index of jQuery object
我有几个div,我想把它放入一个数组。
当我尝试使用jQuery.inArray()时,找不到我的div(作为jQuery对象)。 为什么不?
var myArray = [ $("#div1"), $("#div2"), $("#div3") ];
alert(jQuery.inArray($("#div1"),myArray)); // returns -1
$
每次都会创建一个新的jQuery 集合对象,因此var a = $("div"), b = $("div")
实际上是两个彼此不相等的不同对象。
相反,您可以使用元素的选择器或其他一些识别功能。
var myArray = ["#div1", "#div2", "#div3"];
但它确实取决于您的用例。
两个对象永远不会相同,所以当你这样做时
var object1 = $('#div1');
var object2 = $('#div1');
即使你有相同的元素,对象也不一样
如果您使用相同的对象,它的工作原理
var div1 = $('#div1');
var div2 = $('#div2');
var div3 = $('#div3');
var myArray = [ div1, div2, div3 ];
jQuery.inArray( div1 , myArray); // returns 0
您不能使用.inArray()按内容进行对象比较。
我喜欢这里概述的方法。 它非常干净。
这可能是因为每次调用jQuery构造函数都会导致引用同一DOM节点的新实例。 什么能有效地让你演示inArray
看起来像这样:
var $div1 = $('#div1'),
$div2 = $('#div2'),
myArray = [ $div1, $div2 ];
alert(jQuery.inArray($div1,myArray));
您没有存储对jQuery对象的任何引用,$(“#div1”)将返回包含您的dom元素的新jQuery对象,您正在比较包含相同dom元素的两个不同的jQuery对象。 如果在数组中使用与使用inArray方法时相同的引用,inArray将正常工作。
var arr = [],
$d1 = $("#d1"),
$d2 = $("#d2"),
$d3 = $("#d3");
arr.push($d1, $d2, $d3);
console.log(jQuery.inArray($d3, arr));
你最好创建一个id数组。 滚动时,您可以查看该ID是否在您的数组中,然后继续前进。
var possiblePositions = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
function randomSpin(sides) {
return Math.floor(Math.random() * (sides || 6) ) + 1;
}
var $currentPiece = $('piece.active');
var currentSpot = $currentPiece.attr('spotPosition');
var spin = randomSpin(6) + randomSpin(6);
var nextSpot = currentSpot + spin;
if (possiblePositions.indexOf(nextSpot)) {
$('#div' + nextSpot).append($currentPiece);
}
如果您使用纯jQuery来操作jQuery Collection
那么您可以使用jQuery index()
方法。 但是,返回的索引是dom中元素的位置,而不是它添加到集合中的顺序。 如果你需要处理添加的顺序,那么你最好使用selector strings
而不是jQuery Collection
:
var myArray = $([]).add( "#div4" ).add( "#div3" ).add( "#div1" ).add( '#div2' );
console.log( myArray.index( $('#div3') ) ); //Output: 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.