jQuery removeClass(),它是如何工作的

标签 jquery html css

我的页面上有图片。用户可以通过单击按钮将更多图像添加到页面上。新图像是异步添加的。最初,页面上的每个图像都使用一个特殊的类,以便在加载图像时使用。加载图像后,该类将被删除。 每个正在加载的图像都有 imageLoading 类:

<img class="imageLoading" scr="someimage.png">

加载这些图像后,我删除了该类(没有详细信息的简化代码):

 $('img.imageLoading')
         .each(function(){ $(this)
         .load(function(){ $(this)
         .removeClass('imageLoading');
                               });});

在视觉上,我看到样式已被删除。但是当我再次运行查询时:

$('img.imageLoading')

我通过调试看到返回了所有图像,而不仅仅是加载图像,即它的工作方式就像我没有删除已加载图像的类一样。 我查看了页面源代码,发现实际上在 HTML 中,尽管调用了 removeClass(),但该类并未被删除。

这种设计行为是否应用了所有视觉更改但未在 HTML 代码中删除类属性?如果是这样,在这种情况下如何解决。或者,我可能错过了什么。

UPD 源代码

我还没有解决问题,所以发布一些代码来说明它是如何工作的以及问题出在哪里。 我的代码以这种方式工作(删除了不重要的细节):

加载图片处理:

页面加载后:

    <script type="text/javascript">
       $(function() { processLoadingImages(); })
   </script>

异步调用后:

function onRequestComplete(result) {
            var div = document.createElement('div');
            div.innerHTML = result;
            document.getElementById('images').appendChild(div);
            processLoadingImages();
        }

通过processLoadingImages 函数处理图像:

function processLoadingImages() {
         $('img.loadingImage').each(function() {
        if (!imageLoaded($(this)[0])) {
            $(this).hide()
                .load(function() {
                    removeImageLoadingClasses(this);
                    $(this).fadeIn();
                });
        }
        else {
            removeImageLoadingClasses(this);
        }
    });
}
function removeImageLoadingClasses(jqueryObj) {
        jqueryObj.removeClass('loadingImage');
        jqueryObj.parents('div').removeClass('loadingImageContainer');      
    }
    function imageLoaded(img) {
        if (!img.complete)
            return false;
        if (typeof img.naturalWidth != 'undefined' && img.naturalWidth == 0)
            return false;
        return true;
    }

如您所见,对于每个图像都有一个 div 容器,其中包含一个类,该类已为加载的图像删除。 我如何检查查询是否返回所有图像,甚至是那些调用了 removeClass 的图像?我调试了 imageLoaded 函数(见上文),它总是为所有图像调用。

最佳答案

当您在浏览器中查看代码时,您会看到服务器发送的原始代码。您应该看到一个 DOM 实例以验证该类是否存在。您可以在带有 Firebug 的 Firefox 中轻松做到这一点。

除非您重新加载了页面,否则新查询不应匹配已删除图像加载类的图像。还要检查运行 removeClass 方法的代码是否按预期运行。 Firebug 是测试此类行为的绝佳工具。

关于jQuery removeClass(),它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3051723/

相关文章:

html - 将复选框垂直对齐到 Bootstrap 中的按钮中心

css - 是否有用于包含特定文本的元素的 CSS 选择器?

javascript - 如何阻止在 Google Blogger 模板中加载 CSS 和 js 文件?

javascript - jQuery - 水平+垂直导航栏

jquery - Bootstrap动态加载div到模态中

javascript - 有没有办法将非元素包含的文本添加到 $ ("")?

javascript - 是否可以在幻灯片容器内移动 Orbit 子弹?

javascript - JQuery - 推送方法 JSONArray

javascript - 通过两个条件获取所有文本框值

html - Ng bootstrap 下拉菜单不在前面