2012-03-20 1 views
0

Я использую букмарклет javascript для динамического добавления jQuery на веб-страницу. Букмарклет:Dyamically Added 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 будут возвращены.

+0

Возможно, проблема с дисплеем - это то, что в консоли? попробуйте '$ ('a'). html ('')' и посмотрите, исчез ли весь текст ссылки заголовка. –

+0

Попробуйте следующее: 'jQuery ('a: first'). Html()' Это, вероятно, просто выглядит пустым. – gdoron

+0

Какую версию Chrome вы используете? Установили ли вы расширение, связанное с devtools? –

ответ

0

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

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

+0

'a: first' не возвращает список всех якорей. –

+0

@RobW. Я знаю, кто сказал, что это будет? Он только хочет проверить работу jQuery на странице. в любом случае это можно сделать с помощью .hide() '... – gdoron

+0

Это может быть полезным указателем для отладки, но лучше подходит как комментарий. Вопрос: «Почему массив возвращаемых элементов?». Я не вижу, как 'jQuery ('*'). Hide()' отвечает на этот вопрос. jQuery загружается, так как он первоначально «undefined» и «function (a, b) {return new e.fn.init (a, b, h)}» после выполнения фрагмента букмарклета. –

0

Возможно, проблема с дисплеем с помощью консоли. Я проверил работу над моим последним хром, добавив ваш код в качестве закладки, а затем спрячу все ссылки на google.com.

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

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

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 или консолью.

 Смежные вопросы

  • Нет связанных вопросов^_^