我正在使用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对象。
答案 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或控制台出现了问题。