JQuery代码只选择一个元素而不是多个元素

时间:2016-05-16 10:06:35

标签: javascript jquery html css google-chrome

问题:

我在Google图片的我的保存页面上执行此脚本,但它只选择一个元素。

根据JQuery Documentation

  

注意:大多数返回jQuery对象的jQuery方法也循环遍历jQuery集合中的元素集 - 一个称为隐式迭代的过程。发生这种情况时,通常不必使用.each()方法显式迭代:

这意味着我的代码应该适用于具有指定类的所有元素。但不幸的是,它只是在第一个元素上执行所有工作:

$('.col-cv-select').click();

我也尝试使用.each()方法进行显式迭代,但浏览器控制台在使用此脚本时会抛出错误:

$('.col-cv-select').each(function (index, element) { element.click(); });
  

未捕获的TypeError:$(...)。每个都不是函数(...)

我确信该页面使用JQuery,因为第一个代码运行良好,但只选择一个元素。

重现问题:

  • 我认为您需要先登录Google才能继续操作。
  • 转到 Google 并搜索“独角兽”(或您喜欢的任何内容)。
  • 点击图像标签。
  • 选择任何图像。点击弹出窗口中的保存
  • 使用其他图像重复上述步骤。
  • 接下来访问My Saves页面。
  • 启动浏览器控制台并尝试上述代码。

测试环境:

  • Opera 37.0.2178.43 - 稳定(因为它基于Chromium,希望使用Chrome会产生类似的行为)
  • Windows 8.1 Pro

希望你能帮助我:)提前谢谢。

2 个答案:

答案 0 :(得分:4)

仅仅因为定义了$变量并不意味着在页面上加载了jQuery。

当您在该页面上运行$('.col-cv-select')时,您实际上正在运行document.querySelector('.col-cv-select'),它在设计上只会返回一个元素。

您看到关于$(...).each的TypeError不是函数的原因是因为第一个函数的返回值是DOM节点,而不是jQuery对象。

您可以通过在开发人员控制台中运行此代码将jQuery库注入页面:(从this page采取并改编)

(function() {
    // more or less stolen form jquery core and adapted by paul irish
    function getScript(url) {
        var script = document.createElement('script');
        script.src = url;
        var head = document.getElementsByTagName('head')[0],
            done = false;
        // Attach handlers for all browsers
        script.onload = script.onreadystatechange = function() {
            if (!done && (!this.readyState ||
                    this.readyState == 'loaded' ||
                    this.readyState == 'complete')) {
                done = true;

                script.onload = script.onreadystatechange = null;
                head.removeChild(script);
            }
        };
        head.appendChild(script);
    }

    getScript('https://code.jquery.com/jquery.min.js');
})();

执行该代码后,$变量将替换为jQuery,您将能够使用其.each方法及其附带的所有其他内容。

请记住,一旦你重新加载页面,jQuery库将被卸载,再次加载它你需要重新运行上面的代码。

答案 1 :(得分:0)

您需要在测试之前将jquery导入Chrome浏览器

在调用测试代码之前使用以下代码块

var jq = document.createElement('script');
jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);
// ... give time for script to load, then type.
jQuery.noConflict();