$ .inArray()用于存储在数组中的元素

时间:2017-10-16 20:43:55

标签: javascript jquery

假设在jQuery中我将DOM元素推送到数组中,

var elemarray = [];

elemarray.push($('#elem1'));
elemarray.push($('#elem2'));

然后可以使用$.inArray来确定数组是否包含元素吗?

if ( $.inArray($('#elem2'), elemarray) > -1 ) { .. }

我看到的原始类型,字符串和数字的唯一例子。

JSFiddle,不工作:https://jsfiddle.net/5knyrcph/2/

3 个答案:

答案 0 :(得分:3)

问题是你不是存储DOM元素,而是存储jQuery包装器。每次创建这样的包装器时,它都是一个新的jQuery对象。

而是使用真正的DOM元素本身,使用jQuery可以使用.get()

var elemarray = [];
elemarray.push($('#elem1').get(0));
elemarray.push($('#elem2').get(0));

if ($.inArray($('#elem1').get(0), elemarray) > -1) {
  console.log('Found');
}
else {
  console.log('Not found');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="elem1">
Test
</div>

<div id="elem2">
Test2
</div>

在HTML5 / ES6中,您可以在更短的代码中使用jQuery来执行此操作:

const elemSet = new Set([elem1, elem2]);

if (elemSet.has(elem1)) {
  console.log('Found');
}
else {
  console.log('Not found');
}
<div id="elem1">
Test
</div>

<div id="elem2">
Test2
</div>

答案 1 :(得分:0)

你真的应该使用LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'class': 'logging.StreamHandler' }, }, 'loggers': { '': { # 'catch all' loggers by referencing it with the empty string 'handlers': ['console'], 'level': 'DEBUG', }, }, }

以下是纠正后的JS的小提琴:https://jsfiddle.net/5knyrcph/3/

代码:

!== -1

答案 2 :(得分:0)

Jquery返回一个符合条件的项目数组,所以当你选择一个元素时,它总是会构造一个符合你标准的全新对象数组,以便比较你需要的元素。具有以下两个选项的数组:

$(".element")[position]; //or
$(".element").get(position);

如果在你的小提琴而不是推动Jquery对象,你推动实际元素,那么你将得到正确的结果。 Fiddle Updated

希望这个帮助