2012-03-05 14 views
5

Ho un problema con la mia funzione jQuery in un tema di wordpress. Ho usato esattamente questa funzione tempi gravi e ha funzionato. La funzione restituisce l'ID di un'immagine, che è stata caricata tramite l'uploader wordpress..attr ('classe') non è definito su jQuery()

Ecco la parte rilevante:

// extract the img-ID from class attribute 
var jt = jQuery('img', html).attr('class'); 
alert(html); 
alert(jt); 
j1 = jt.split(' '); 

Entrambe le segnalazioni sono lì solo per capire, che cosa succede. alert (html) restituisce questo:

<img src="http://www.xyz.com/files/2012/03/stage.jpg" alt="" title="" width="1000" height="371" class="alignnone size-full wp-image-6" /> 

ma alert (jt) restituisce "undefined".

Qualche idea? Sarebbe fantastico, se potessi aiutare.

gen

+0

codice non ha senso ... mostra come html viene definito e spiega cosa stai cercando di fare con html come argomento di contesto – charlietfl

+0

cosa ottieni in allerta (html)? è un oggetto jqery? – Liviu

+0

tramite .html() chiedi contenuto tra i tag. non è per tag atributes. –

risposta

6

L'utilizzo dell'argomento contesto con la variabile html non è corretto. Secondo lo jQuery documentation, tale argomento di contesto dovrebbe essere un elemento DOM, un documento o un oggetto jQuery. Non può essere una stringa di HTML.

Se, quello che hai è una stringa e vuoi trasformarla in un oggetto DOM, puoi farlo in vari modi.

Questo codice creerà un oggetto DOM dalla stringa html che avete e quindi recupererà l'attributo di classe da tale oggetto DOM.

var html = '<img src="http://www.xyz.com/files/2012/03/stage.jpg" alt="" title="" width="1000" height="371" class="alignnone size-full wp-image-6" />'; 
var item = jQuery(html); 
var jt = item.attr('class'); 
alert(jt); 
j1 = jt.split(' '); 

Si può vedere il lavoro qui: http://jsfiddle.net/jfriend00/phnED/

+0

Grazie! Ha funzionato !! – jabre

0

attr('class') funziona. Probabilmente il tuo contesto var (html) è solo indefinito.

A proposito, per memorizzare i dati, è opportuno utilizzare HTML5 custom data- attributes anziché le classi.

+0

html è definito. Puoi vedere il contenuto di html nella mia domanda originale. So che questo codice non è la soluzione migliore. Ma voglio usare wordpress own uploader dell'immagine e questo tag-immagine nella mia domanda è l'unica cosa che ritorna. Non ho alcuna influenza su ciò che restituisce, perché sto scrivendo un tema e la modifica dei file core non è un'opzione. – jabre

0

Quando avere dato html-string, questo dovrebbe di norma funziona:

$(html).attr('class'); 
+0

No, non funziona. jt è ancora indefinito. – jabre

2

Il tuo problema è qui:

jQuery('img', html) 

Il contesto è html e apparentemente html è un'immagine così sei cercando uno img all'interno di uno img che non troverà.

EDIT:
Se html è <img src="http://www.xyz.com/files/2012/03/stage.jpg" alt="" title="" width="1000" height="371" class="alignnone size-full wp-image-6" /> allora si può afferrare la classe in questo modo:

var klass = $(html).attr('class'); 

// You could do this to create an array of all classes 
var klasses = $(html).attr('class').match(/\S+/g); 
+0

Hai qualche suggerimento, cosa posso usare al posto di jQuery ('img', html)? – jabre

+0

Penso che anche altri abbiano la risposta giusta, ma ho appena modificato la mia risposta. Questo dovrebbe funzionare – elclanrs

1

La variabile di contesto html che hai fornito non è definito in quel momento, e si dovrebbe definire come il DOM elemento di cui l'immagine è figlia.

$(document).ready(function() { 
// extract the img-ID from class attribute 
var html = jQuery('.some-class'); 
var jt = jQuery('img', html).attr('class'); 
alert(html); 
alert(jt); 
j1 = jt.split(' '); 
}); 

http://api.jquery.com/jQuery/

http://jsfiddle.net/ssUhJ/

0

senza html

var jt = jQuery('img').attr('class'); 
alert(jt); 
j1 = jt.split(' '); 
alert(j1); 
+0

Probabilmente sarebbe utile per l'OP se hai spiegato il codice che stai usando. Basta scrivere un pezzo di codice senza spiegazioni in realtà non funziona bene in un formato QA. – sinemetu1

+0

La risposta (spiegare) è stata pubblicata come commento direttamente alla domanda posta. –

-1

A partire da jquery 1.6 (vedere docs for .attr), il .attr è passato dal restituire una stringa vuota a restituire undefined.

Aprire questo jsfiddle http://jsfiddle.net/QVqXC/ e modificare la versione jquery caricata e vedere come cambia il messaggio di output.