假设在jQuery中我将DOM元素推送到数组中,
var elemarray = [];
elemarray.push($('#elem1'));
elemarray.push($('#elem2'));
然后可以使用$.inArray
来确定数组是否包含元素吗?
if ( $.inArray($('#elem2'), elemarray) > -1 ) { .. }
我看到的原始类型,字符串和数字的唯一例子。
JSFiddle,不工作:https://jsfiddle.net/5knyrcph/2/
答案 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
希望这个帮助