Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 动态添加的jQuery从选择器返回奇怪的结果_Javascript_Jquery_Bookmarklet - Fatal编程技术网

Javascript 动态添加的jQuery从选择器返回奇怪的结果

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 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].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>​
]