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

时间:2013-01-13 21:49:30

标签: jquery google-chrome web-scraping

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

$('td')

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

<td>Apples</td>

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

以下是相关网站:http://www.w3schools.com/html/html_tables.asp

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

4 个答案:

答案 0 :(得分:84)

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

您可以使用$$()获得所需内容,document.querySelectorAll()由控制台指定为jQuery的快捷方式。

要知道页面是否包含jQuery,您可以在控制台中执行$。要知道jQuery是否已分配给$().jquery,您可以执行{{1}},如果是这种情况,将返回jQuery版本。

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

答案 1 :(得分:15)

似乎没有正确包含jQuery以在目标页面上运行。我遇到了类似的问题,谷歌浏览器解决了以下问题。

在您的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)}中键入时返回$之类的内容。

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

PS:片段的积分不是我的,因为我已经使用了一段时间而且不记得我从哪里得到它。

希望它有所帮助。

答案 2 :(得分:4)

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

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

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

$('td').get();

将返回一个DOM元素数组。

如果这不起作用,那么您应该检查拨打$('td').get()的时间,以确保在搜索之前,您想要的所有td项都在页面中。

答案 3 :(得分:0)

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

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