Tim*_*imo 5 javascript jquery jquery-selectors
我有一堆带有“.myclass”类的元素。现在我想通过其节点索引选择这些元素之一并为其设置动画。我收到一条错误消息,指出该元素没有动画功能。
例子:
<div class="myclass"></div>
<div class="myclass"></div>
<div class="myclass"></div>
var indizes = [0, 3];
$.each(indizes, function(i, v) {
$('.myclass')[v].animate({
left: 100
}, 1000);
});
Run Code Online (Sandbox Code Playgroud)
显然错误来自使用错误的选择器。如果我使用它确实有效
$($('.myclass')[v])
Run Code Online (Sandbox Code Playgroud)
代替
$('.myclass')[v]
Run Code Online (Sandbox Code Playgroud)
这是实际问题吗?嵌套选择器对我来说似乎很奇怪。
这是实际问题吗?
是的。如果您通过括号表示法访问所选元素,则会返回原始 DOM 元素。DOM 元素没有animate方法。通过再次将 DOM 元素传递给 jQuery ( $($('.myclass')[v])),您正在创建一个 jQuery 对象(再次)。
您可以避免这种情况,并使用.eq该索引处的元素获取 jQuery 对象:
$('.myclass').eq(v);
Run Code Online (Sandbox Code Playgroud)
最好在循环外保留对所选元素的引用:
var indizes = [0, 3];
var $elements = $('.myclass');
$.each(indizes, function(i, v) {
$elements.eq(v).animate({
left: 100
}, 1000);
});
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用.filter过滤掉要设置动画的元素,这至少看起来更简洁一些:
$('.myclass').filter(function(i) {
return $.inArray(i, indizes) > -1;
}).animate({
left: 100
}, 1000);
Run Code Online (Sandbox Code Playgroud)