2012-03-27 5 views
1

Mein JavaScript-Modul kann ein bestimmtes DOM-Element mit einem Klassennamen nicht finden, wenn $('.classname') verwendet wird, auch wenn das Element vorhanden ist.

$('.classname').length 0 zurück, wo als $.find('.classname').length liefert 1.

Webseite auch andere JavaScript-Module enthält.

Kann mir jemand helfen zu finden, warum das passiert?

Meine jQuery-Version ist 1.7.1.

Um dies zu reproduzieren 1- Gehen Sie zu avc.com
2- Öffnen Sie die Konsole.
3- Fügen Sie den folgenden Code in die Konsole ein.

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- Versuchen
$('.pkg').length und $.find('.pkg').length.

Finden Sie den Screenshot hier aus http://i.imgur.com/4UDHz.png

Ein weiterer Punkt, wenn Sie versuchen, diese in einigen anderen Websites, funktioniert es richtig.

+1

auf Ihrer Seite mit does: alert (jQuery == $) gibt dir einen Wert von true? – aquinas

+0

Dies funktioniert http://jsfiddle.net/GaSXP/ –

+0

@SheikhHeera können Sie es versuchen, ich habe meine Frage aktualisiert – Jeevan

Antwort

2

Möglicherweise haben Sie Konflikte mit Ihren anderen JavaScript-Modulen. Schauen Sie in jQuery noconflict

Viele JavaScript-Bibliotheken $ als Funktion oder Variablennamen verwenden, nur wie jQuery tut. In jQuerys Fall ist $ nur ein Alias ​​für jQuery, so dass alle Funktionen verfügbar sind, ohne $ zu verwenden. Wenn wir brauchen eine andere JavaScript-Bibliothek neben jQuery verwenden, können wir die Kontrolle über $ zurück auf die andere Bibliothek mit einem Aufruf von $ .noConflict zurückkehren()

Versuchen

jQuery('.classname').length 
+0

Es funktioniert nicht. Ich habe bereits noconflict verwendet. Meine Fragen waren, warum $ ('. Classname'). Length 0 zurückgibt und die gleiche $ .find ('. Classname'). Length gibt 1 zurück – Jeevan

+0

Können Sie versuchen, Ihr Problem in einer jsfiddle zu replizieren? – Rondel

+0

Ich arbeite an einer Erweiterung, die JavaScript auf allen Websites einfügen wird. Ich habe bemerkt, dass dies mit avc.com passiert. Hier ist ein Screenshot von dem, was passiert - http://i.imgur.com/4UDHz.png Um dies zu reproduzieren Gehen Sie zu avc.com Öffnen Sie die Konsole. Fügen Sie den folgenden Code ein. 'var head = document.getElementsByTagName ("Kopf") [0]; var script = document.createElement ("Skript"); script.type = "text/javascript"; script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"; script.async = true; head.appendChild (Skript); ' Dann versuchen Sie $ ('. Pkg'). Länge $ .find ('. Pkg'). Länge – Jeevan