Javascript 函数不工作
我最近遇到了.not()函数的问题,代码如下:Javascript 函数不工作,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我最近遇到了.not()函数的问题,代码如下: var interval = setInterval(function() { $('.test').not('.updated').each(function(){ var $parentDiv = $('.test').parent('div'); // do something parentDiv.find('.test').add
var interval = setInterval(function() {
$('.test').not('.updated').each(function(){
var $parentDiv = $('.test').parent('div');
// do something
parentDiv.find('.test').addClass("updated");
//Above: change this element's status
});
}, 3000);
问题是:
有时,当元素$('.test')也在循环中“更新”了类时
我的想法是:
这表示not()选择器不工作?
因此,我想知道代码的真正问题是什么?您的代码正在查找类为“test”的所有元素,然后排除类为“updated”的元素 然后,对于这些元素中的每一个,您都要执行另一个
.find()
操作来查找类为“test”的元素。但是,这不包括.not()
调用,因此,如果在另一个元素中嵌套了类为“test”的元素,则无论该元素是否已经有类“updated”,它都会受到影响
我认为你的代码应该是这样的:
var interval = setInterval(function() {
$('.test').not('.updated').addClass("updated");
}, 3000);
var interval = setInterval(function() {
$('.test').not('.updated').each(function(){
var $parentDiv = $(this).parent('div');
// do something
$(this).addClass("updated");
//Above: change this element's status
});
}, 3000);
您不需要.each()
,因为.addClass()
将为您完成这项工作
编辑-如果确实需要在.each()
中执行更多工作,则代码如下所示:
var interval = setInterval(function() {
$('.test').not('.updated').addClass("updated");
}, 3000);
var interval = setInterval(function() {
$('.test').not('.updated').each(function(){
var $parentDiv = $(this).parent('div');
// do something
$(this).addClass("updated");
//Above: change this element's status
});
}, 3000);
在.each()
回调中,这个
将绑定到外部jQuery序列中的每个选定元素:具有类“test”但没有类“updated”的元素集。如果在.each()
回调中再次使用$(“.test”)
,则将重新开始,并在整个页面中查找类为“test”的所有元素。您使用的是.find()
,用于选择该元素的所有后代
提及
因此,在您的情况下,场景是class。test
不带class。updated
将搜索其所有子级以查找class。test
并将classupdated
添加到其中。因此,所有的孩子,无论他们是否有类.updated
,.updated
类,都将被添加到该类中
因此,您想做的事情可以简单地通过以下方式实现:
$('.test').not('.updated').each(function(){
$(this).addClass("updated");
});
或者为什么不简单
$('.test').not('.updated').addClass('updated');
这是更新后的函数,它应该在每个循环中使用
$(this)
而不是$('.test')
var interval = setInterval(function() {
$('.test').not('.updated').each(function(){
var $parentDiv = $(this).parent('div');
// do something
$(this).addClass("updated");
//Above: change this element's status
});
}, 3000);
当您在每个
$('.test')
中引用时,这是所有的测试类.updated
或其他,这就是.updated
类仍然在循环中出现的原因。您嵌套了测试类吗?谢谢您的回答,这是我的错,我忘了说,我想做一件事,在添加更新的类之后,所以循环不仅仅用于添加类,我已经更改了问题,所以在这种情况下,您知道有什么问题吗?@llyjy21您的代码仍然有相同的基本问题。每次调用$(“.test”)
都会返回到整个DOM,以查找类为“test”的所有元素。非常感谢,我想我现在明白了