简单的 jQuery 选择器只选择 Chrome 中的第一个元素..?

Posted

技术标签:

【中文标题】简单的 jQuery 选择器只选择 Chrome 中的第一个元素..?【英文标题】:Simple jQuery selector only selects first element in Chrome..? 【发布时间】:2012-12-27 19:56:47 【问题描述】:

我对 jQuery 有点陌生,所以请原谅我太密集了。我想通过 Chrome 的 JS 控制台选择特定页面上的所有 <td> 元素:

$('td')

然而,当我这样做时,我得到以下输出:

<td>Apples</td>

jQuery 不应该返回带有&lt;td&gt; 标签的元素数组吗?为什么我只看到符合此条件的第一个元素?

这里是有问题的网站:http://www.w3schools.com/html/html_tables.asp

编辑:我想补充一点,当我在 Chrome 控制台中键入一个 jQuery 函数时,我没有得到一个 jQuery 对象。我得到一个普通的 HTML 元素。我的 Chrome 设置/配置方式一定有问题。

【问题讨论】:

它确实选择了每个元素。 element selector 【参考方案1】:

如果网页上没有 jQuery,当然也没有其他代码为 $ 分配内容,Chrome 的 JS 控制台会为 $ 分配一个快捷方式到 document.querySelector()

您可以使用$$() 来实现您想要的,控制台为document.querySelectorAll() 分配了一个快捷方式。

要知道页面是否包含jQuery,可以在控制台执行jQuery。要知道 jQuery 是否分配给 $,您可以执行 $().jquery,如果是这样,它将返回 jQuery 版本。

此外,还有浏览器插件可以在每个网页中注入 jQuery。

【讨论】:

次要更正:$ 不是 document.getElementById 的别名 - 它是 document.querySelector 的别名。 developers.google.com/web/tools/chrome-devtools/console/… 这个更正绝对不是小事 :-) 实际上,行为已经改变。通过谷歌搜索,我找到了WebKit ticket 92648。感谢您指出这一变化。 如果你想对每一个都进行操作你可以做[].forEach.call($$(".ClassName"), function(fe) fe.click();)【参考方案2】:

似乎没有正确包含 jQuery 以在您的目标页面上运行。我遇到了类似的问题,并针对 Google Chrome 解决了如下问题。

在您的 Chrome 浏览器中添加一个书签,其中包含以下单行代码作为 URL 字段(为了便于阅读而对其进行了美化):

javascript: (function () 
    var s = document.createElement('script');
    s.setAttribute('src', 'https://code.jquery.com/jquery-latest.min.js');
    if (typeof jQuery == 'undefined') 
        document.getElementsByTagName('head')[0].appendChild(s);
    
    jQuery("td.edit select option[value=BN]").attr("selected", "");
)();

然后只需单击该书签即可运行它。当您输入$ 时,预计会正常包含jQuery 并使控制台返回function (e,t)return new b.fn.init(e,t,r) 之类的内容。

创建书签(也称为书签)的过程是在您希望使用控制台处理的每个页面中注入 jQuery 的简写。但是,如果您将 sn-p 代码直接复制粘贴到 JS 控制台中,也可以使用。

PS:sn-p 的积分不是我的,因为我用了一段时间,不记得我从哪里得到的。

希望对你有帮助。

【讨论】:

如何将代码保留为 url ?我按下回车的那一刻,它被谷歌搜索(我将全向栏设置为谷歌搜索)。 使用 Chrome,在地址栏中输入 sn-p 的那一刻,字符串开头的“javascript:”部分奇怪地被省略了,该命令被解释为搜索词。我已经用 Firefox 进行了测试,但这并没有发生。直接在地址栏中使用 sn-p 时,请确保在函数声明之前输入“javascript:”。 是的,这也发生在我身上......我手动添加了“javascript:”,但仍然点击输入没有任何反应,页面重新加载或其他什么......我没有什么可以收藏跨度> 书签是存储 url 以供以后使用的简写,当您需要将 jquery 本地注入到您正在查看的给定网页中以防它尚未加载时。运行 sn-p 后(通过单击您的书签代码,在地址栏甚至在控制台中键入它),预计 jquery 会被加载,以便您使用浏览器控制台进行操作。页面(就请求而言)没有真正发生任何事情,因为它是 jquery 库的简单动态包含。希望对您有所帮助。【参考方案3】:

如果安装了 jQuery,并且 $ 符号是 jQuery 的简写,则 $('td') 返回一个 jQuery 对象。但是,在您链接的 w3schools 页面中,我看不到 jQuery 甚至存在。

如果 jQuery 存在并且调试器没有覆盖 $ 符号,那么 $('td') 将返回一个 jQuery 对象。 jQuery 对象是一个类似数组的对象(具有数组的一些属性),但它不是一个实际的数组。如果您在控制台中查看内容,则必须确保查看的是 DOM 元素本身,而不是包含的 jQuery 对象。

如果你想得到一个实际的 DOM 元素数组,你可以这样做:

$('td').get();

这将返回一个 DOM 元素数组。

如果这不起作用,那么您应该检查调用$('td').get() 的时间,以确保您想要的所有td 项目都在页面中,然后再搜索它们。

【讨论】:

也许问题出在我的 Chrome 配置上?当我输入$('td') 时,我没有得到一个jQuery 对象……我只是得到一个普通的HTML 元素。同样,当我输入 $('td').get() 时,我收到错误消息 TypeError: Object #&lt;HTMLTableCellElement&gt; has no method 'get' @effbott - Chrome 调试器可能已覆盖 $ 作为调试快捷方式。尝试使用jQuery('td') jfriend00,这听起来很对。当我在控制台中输入jQuery('td') 时,我收到错误消息ReferenceError: jQuery is not defined。也许我应该重新安装 Chrome?我并不总是有这个问题。 @effbott - w3schools page you linked 上似乎没有安装 jQuery。因此,您不能在该页面上使用 jQuery。 “在那个对象中是一个 DOM id 的数组” - 它是一个 DOM 元素的数组(类似对象), 不是 DOM ids。(我相信你知道。)【参考方案4】:

此外,如果您尝试对每个 td 执行某些操作,则需要使用 .each() 循环遍历它们。例如:

$('td').each(function() 
   //do something relevant here
);

【讨论】:

以上是关于简单的 jQuery 选择器只选择 Chrome 中的第一个元素..?的主要内容,如果未能解决你的问题,请参考以下文章

JQUERY选择器第一天

Layuilayui时间选择器只选择时和分,不显示秒

Layuilayui时间选择器只选择时和分,不显示秒

Layuilayui时间选择器只选择时和分,不显示秒

jQuery 多日期选择器问题

elementui日期选择器只选择月份后如何监听