2013-05-03 12 views
8

Questo deve essere qualcosa che trascuro, ma per favore guarda la pagina seguente e JavaScript e dimmi perché, per tutto ciò che è sacro, jQuery non restituirà vero?Gli oggetti jQuery dello stesso elemento non sono uguali?

HTML: http://alcatel.scottbuckingham.com/reporting/test.html

<p class="test">hello1</p> 

JS: http://alcatel.scottbuckingham.com/reporting/_scripts/collapse.js

;(function($, window, document, undefined) { 

     var t = $('.test'); 
     var s = $('.test'); 

     console.log(t); 
     console.log(s); 

     if (t === s) { 
      console.log('yes'); 
     } 

})(jQuery, window, document); 

ho letteralmente passato ore a cercare di lavorare fuori e ridotto a questo, quasi 1 === 1 dichiarazione che non funziona.

Qualsiasi aiuto è molto apprezzato!

+0

Sono davvero confuso ora. Se il suo Javascript anche allora dovrebbe funzionare. O per favore qualcuno può portarmi da qualche parte dove posso capire cosa sta succedendo. –

+1

Funziona ma sta confrontando gli oggetti jQuery e non i nodi HTML. Sono due diversi oggetti jquery quando vuole confrontare l'html. –

+0

Uhm, grazie per aver sottolineato che dovrei imparare JavaScript, ma sono ben consapevole della differenza tra i due. In ogni caso, confrontando oggetti jQuery o no, questo dovrebbe restituire true. –

risposta

8

Prova questo - Demo di lavoro ->http://jsfiddle.net/mohammadAdil/tHjgN/

if(t.is(s)) { 
    console.log('yes'); 
} 

http://api.jquery.com/is/

O con ===

if (t.get(0) === s.get(0)) { //<--Compare DOM elements instead of jquery object's 
    console.log('again yes'); 
} 

Demo ->http://jsfiddle.net/mohammadAdil/tHjgN/1/

+0

Grazie, per qualche motivo non ho mai capito che jQuery non ti permette di confrontare oggetti identici. Forse non l'ho mai usato prima e questo è quello che mi ha buttato qui. Grazie per l'aiuto! –

+0

lol ha dimenticato la cosa di riferimento grazie ad Adil, Eru – Geomorillo

1

si potrebbe fare questo, un confronto dei nodi HTML. Che se si desidera confrontare gli oggetti HTML è il modo corretto per farlo.

if (t[0] === s[0]) { 
    console.log('yes'); 
} 
+0

Ma il punto è: non sembra nemmeno che jQuery trovi gli elementi. Non c'è davvero nient'altro sulla pagina, e se creo un jsFiddle con questo codice esatto, funziona perfettamente. –

+0

L'uso della console di JS di Chrome trova gli elementi giusti e jquery funziona come dovrebbe quando si segue il collegamento: si sta utilizzando e IIFE e viene eseguito quando viene trovato, quindi posizionalo nella parte inferiore del DOM o usa '$ (documento) .ready() '. –

2

È possibile utilizzare il metodo jQuery is.

Descrizione: verifica l'attuale serie corrispondente di elementi su un selettore, elemento, o oggetto jQuery e ritorno vero se almeno uno di questi elementi corrisponde gli argomenti dati.

if (t.is(s)) { 
    console.log('yes'); 
} 

Esempio violino: http://jsfiddle.net/IrvinDominin/q86Sh/

1

Hai avuto lo script nella <head> ma l'elemento <p class="test">hello1</p> in <body>.

Per prima cosa è necessario utilizzare $(document).ready() per assicurarsi che il contenuto sia caricato. Quindi controlla se sono uguali usando .is().

$(document).ready(function() { 

     var t = $('.test'); 
     var s = $('.test'); 

     console.log(t); 
     console.log(s); 

     if (t.is(s)) { 
      console.log('yes'); 
     } 
}); 

Confrontare gli esempi with e without la funzione .ready().

+0

No, non lo è ;-) Questo è un pattern di plugin jQuery molto valido. Vedi: http://jqueryboilerplate.com/ –

+0

@ReinierKaper Sì, lo fa. Controlla i miei esempi aggiornati. – Antony

+0

@ReinierKaper Dovresti notare che il riferimento che hai dato è per lo sviluppo di plugin jQuery (estensioni a jQuery stesso), non per l'utilizzo di jQuery all'interno della tua pagina HTML. – Cheekysoft

1

Questo potrebbe aiutare a:

var test = document.getElementById('test') //returns a HTML DOM Object 
var test = $('#test') //returns a jQuery Object 
var test = $('#test')[0] //returns a HTML DOM Object 

Quindi (come ribalte ti hanno detto) utilizzare questo:

if (t[0] === s[0]) { 
    console.log('yes'); 
} 

Inoltre è buona norma usare

$(document).ready(function(){ 


}); 

intorno il codice .

Problemi correlati