jQuery $ ('. classname'). length не работает, но $ .find ('. classname'). length работает, почему? - PullRequest
1 голос
/ 27 марта 2012

Мой модуль JavaScript не может найти определенный элемент DOM с именем класса, используя $('.classname'), даже если этот элемент существует.

$('.classname').length возвращает 0, где $.find('.classname').length возвращает 1.

Сайт также содержит другие модули JavaScript.

Может кто-нибудь помочь мне выяснить, почему это происходит?

Моя версия jQuery 1.7.1.

Чтобы воспроизвести это 1- Перейти на avc.com
2- Открытая консоль.
3- Вставьте следующий код в консоль.

var head = document.getElementsByTagName("head")[0];  
var script = document.createElement("script");  
script.type = "text/javascript";  
script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js";  
script.async = true;  
head.appendChild(script);

4- Попробуйте
$('.pkg').length и $.find('.pkg').length.

Найдите скриншот отсюда http://i.imgur.com/4UDHz.png

Еще один момент, если вы попробуете это на некоторых других сайтах, он работает правильно.

1 Ответ

2 голосов
/ 27 марта 2012

У вас могут быть конфликты с другими вашими модулями JavaScript. Посмотрите на jQuery noconflict

Многие библиотеки JavaScript используют $ как имя функции или переменной, просто как делает jQuery. В случае jQuery $ - это просто псевдоним для jQuery, поэтому все функции доступны без использования $. Если нам нужно использовать другая библиотека JavaScript наряду с jQuery, мы можем вернуть контроль над $ обратно в другую библиотеку с вызовом $ .noConflict ()

Попробуйте использовать

jQuery('.classname').length
...