2012-03-20 107 views
0

我正在使用JavaScript书签动态地添加jQuery到网页。该书签是:强力添加jQuery返回从选择器奇怪的结果

javascript:var s=document.createElement('script');s.type='text/javascript';s.src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js';document.getElementsByTagName('body')[0].appendChild(s); 

当我跑这对一个示例站点(比如www.google.com),通过打开Chrome Web检查我得到:

>jQuery; 
    ReferenceError: jQuery is not defined 

----运行小书签---

>jQuery; 
    function (a,b){return new e.fn.init(a,b,h)} 
>jQuery('a'); 
    [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] 

为什么返回一个空元素数组?我的期望是DOM元素的数组或jQuery对象将被返回。

+0

可能只是一个显示问题,是在控制台吗?尝试'$('a')。html('')',看看所有的标题链接文本是否消失。 – 2012-03-20 20:32:04

+0

试试这个:'jQuery('a:first')。html()'这可能只是空的。 – gdoron 2012-03-20 20:32:37

+0

您使用的是哪个Chrome版本?你有没有安装任何devtools相关的扩展? – 2012-03-20 20:33:32

回答

0

这可能只有看起来空因为有太多元素。

试试这个:jQuery('a').hide()。如果您在页面中看不到任何链接,它可以工作... :-)

+0

'a:first'不会返回所有锚的列表。 – 2012-03-20 20:34:11

+0

@RobW。我知道,谁说会呢?他只想检查页面的jQuery作品。无论如何,它可以通过'.hide()'来完成...... – gdoron 2012-03-20 20:35:36

+0

这可能是一个有用的调试指针,但它更适合作为评论。问题是“为什么返回空数组元素?”。我看不到'jQuery('*')。hide()'如何回答这个问题。在执行小书签片段之后,jQuery被加载,因为它最初是'undefined','function(a,b){return new e.fn.init(a,b,h)}'。 – 2012-03-20 20:37:59

0

可能只是控制台的显示问题。我通过将您的代码添加为书签,然后隐藏google.com上的所有链接来验证我的最新Chrome的工作情况。

我唯一能想到的就是你没有等待脚本/页面加载。您可以将一些日志添加到书签中以确保脚本已加载。

作为一个旁注,在填充数组之前,chrome/jquery似乎使用它的长度呈现数组(在控制台中)。在此页面上打开开发工具并运行$('a')。在控制台显示数组中的HtmlElement之前,您将看到〜170个逗号。

0

当我完全按照您使用自己的书签所描述的方式进行操作时,在Chrome的最新稳定版本的开发人员控制台中,我将获得一组dom元素,如您所期望的那样。它看起来像下面的缩写代码。

[ 
<a href=​"/​setprefs?prev=https:​/​/​www.google...">​Screen reader users,...</a>​ 
, 
<a onclick=​"...</a>​ 
, 
... 
, 
<a id=​"cpNavLink" href=​"javascript:​void(0)​">​Change background image​</a>​ 
] 

我注意到,虽然是几分之一秒,我得到一个像你的例子一样的空数组。然后在几分之一秒后填入dom元素。我几乎可以看到它被元素逐个填充。所以,我的猜测是,Chrome或您的控制台有问题。