动态添加jQuery从Selector返回奇怪的结果

时间:2012-03-20 20:27:40

标签: javascript jquery bookmarklet

我正在使用javascript bookmarklet动态地将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对象。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分: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或控制台出现了问题。