Javascript 函数不工作

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

我最近遇到了.not()函数的问题,代码如下:

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
并将class
updated
添加到其中。因此,所有的孩子,无论他们是否有类
.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”的所有元素。非常感谢,我想我现在明白了