Димитически добавленный jQuery возвращает странный результат из селектора - PullRequest
0 голосов
/ 21 марта 2012

Я использую букмарклет javascript для динамического добавления 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, я получаю:

>jQuery;
  ReferenceError: jQuery is not defined

---- запустить букмарклет ---

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

Почему возвращается массив пустых элементов?Я ожидаю, что будет возвращен массив или объект jQuery элементов DOM.

Ответы [ 3 ]

0 голосов
/ 21 марта 2012

Возможно, просто проблема с отображением консоли.Я проверил работу над моим последним Chrome, добавив код в качестве закладки, а затем скрыл все ссылки на google.com.

Единственное, о чем я могу думать, это то, что вы не ожидали загрузки скрипта / страницы.Вы можете добавить несколько журналов в букмарклет, чтобы убедиться, что скрипт загружен.

Поскольку примечание chrome / jquery отображает массив с его длиной (в консоли) перед заполнением массива.На этой странице откройте инструменты разработчика и запустите $('a').Вы увидите ~ 170 запятых, прежде чем консоль покажет HtmlElement в массиве.

0 голосов
/ 21 марта 2012

Когда я делаю то же самое, что вы описываете, используя свой собственный букмарклет, в консоли разработчика последней стабильной версии 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 или вашей консолью.

0 голосов
/ 21 марта 2012

Вероятно, только выглядит пустым, потому что слишком много элементов.

Попробуйте это: jQuery('a').hide(). Если вы больше не видите ссылки на странице, она работает ... : -)

...