Javascript 动态添加的jQuery从选择器返回奇怪的结果
我正在使用javascript bookmarklet将jQuery动态添加到网页。bookmarklet是:Javascript 动态添加的jQuery从选择器返回奇怪的结果,javascript,jquery,bookmarklet,Javascript,Jquery,Bookmarklet,我正在使用javascript bookmarklet将jQuery动态添加到网页。bookmarklet是: 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].appen
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 inspector,我得到:
>jQuery;
ReferenceError: jQuery is not defined
----运行bookmarklet---
为什么返回空元素数组?我的期望是返回DOM元素的数组或jQuery对象。可能只是看起来是空的,因为元素太多了
试试这个:
jQuery('a').hide()
。如果你在页面中再也看不到任何链接,它会工作:-)可能只是控制台的显示问题。我通过将你的代码添加为书签,然后隐藏google.com上的所有链接,验证了我在最新chrome上的工作
我唯一能想到的是,您没有等待脚本/页面加载。您可以在bookmarklet中添加一些日志,以确保脚本已加载
另一方面,chrome/jquery似乎在填充数组之前(在控制台中)使用其长度呈现数组。在此页面上打开开发工具并运行
$('a')
。在控制台显示数组中的HtmlElement之前,您将看到约170个逗号。当我使用您自己的bookmarklet完全按照您所描述的操作时,在最新稳定版本的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或控制台有问题 可能只是显示问题,是在控制台中吗?试试
$('a').html(“”)
,看看是否所有的标题链接文本都消失了。试试这个:jQuery('a:first').html()
,它可能看起来是空的。你使用的是哪个Chrome版本?您是否安装了任何与devtools相关的扩展?不要忘记接受某人的答案(单击答案旁边的绿色箭头),或者至少给他们投票(单击灰色向上箭头),让他们花时间回答您的问题。我指的是绿色复选标记,而不是绿色箭头。a:first
不会返回所有锚定的列表。@RobW。我知道,谁说会的?他只想检查页面的jQuery工作情况。无论如何,可以使用.hide()
…这可能是调试的一个有用指针,但它更适合作为注释。问题是“为什么返回空元素数组?”。我看不出jQuery('*')。hide()如何回答这个问题。jQuery被加载,因为它最初是未定义的
,函数(a,b){在执行bookmarklet片段后返回新的e.fn.init(a,b,h)}
。@RobW。好的。改为jQuery('a')。hide()
尽管隐藏所有页面要酷得多…:-)
[
<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>
]