2012-03-05 21 views
5

Tengo un problema con mi función jquery en un tema de wordpress. He usado exactamente esta función varias veces y funcionó. La función devuelve el ID de una imagen, que se cargó mediante el cargador de wordpress..attr ('clase') no está definido en jQuery()

Aquí está la parte pertinente:

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

Ambas alertas sólo están ahí para averiguar, lo que sucede. alerta (html) devuelve la siguiente:

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

, pero alerta (JT) devuelve "indefinido".

¿Alguna idea? Sería genial, si pudieras ayudar.

Ene

+0

código no tiene sentido ... mostrar cómo html consigue definido y explicar lo que está tratando de hacer con HTML como argumento contexto – charlietfl

+0

lo que se obtiene en estado de alerta (html)? ¿es un objeto jqery? – Liviu

+0

vía .html() solicita contenido entre etiquetas. no es para los atributos de etiqueta. –

Respuesta

6

La utilización del argumento de contexto con la variable de HTML es incorrecta. Según el jQuery documentation, ese argumento de contexto debe ser un elemento DOM, un documento o un objeto jQuery. No puede ser una cadena de HTML.

Si, lo que tienes es una cadena y quieres convertirlo en un objeto DOM, puedes hacerlo de varias maneras.

Este código creará un objeto DOM a partir de la cadena html que tiene y luego recuperará el atributo de clase de ese objeto 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(' '); 

Se puede ver que funcione aquí: http://jsfiddle.net/jfriend00/phnED/

+0

Gracias! ¡¡Eso funciono!! – jabre

0

attr('class') funciona. Probablemente su contexto var (html) no está definido.

Por cierto, para almacenar datos, tiene sentido usar HTML5 custom data- attributes en lugar de clases.

+0

html está definido. Puedes ver el contenido de html en mi pregunta original. Sé que este código no es la mejor solución. Pero quiero usar WordPad propio cargador de imágenes y esta etiqueta de imagen en mi Pregunta es lo único que devuelve. tengo ninguna influencia en lo que devuelve, porque yo estoy escribiendo un tema y la edición de los archivos del núcleo no es una opción. – jabre

0

Al tener el html-cadena dada, esto normalmente debería funcionar:

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

No, eso no funciona. jt aún no está definido. – jabre

2

Su problema está aquí:

jQuery('img', html) 

El contexto es htmlhtml y al parecer es una imagen por lo que está buscando un img dentro de un img que no encontrará.

EDIT:
Si html es <img src="http://www.xyz.com/files/2012/03/stage.jpg" alt="" title="" width="1000" height="371" class="alignnone size-full wp-image-6" /> continuación se puede agarrar la clase como esta:

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

¿Tiene alguna sugerencia, por lo que se pueden utilizar en lugar de jQuery ('img', html)? – jabre

+0

creo que los demás tienen la respuesta correcta también, pero me acaba de editar mi respuesta. Eso debería funcionar. – elclanrs

1

La variable de contexto html que ya ha proporcionado no está definido en ese momento, y usted debe definirlo como el DOM elemento del que la imagen es hija.

$(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

sin html

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

Probablemente sería útil para el OP si explicado el código que está utilizando. Simplemente escribir un fragmento de código sin explicación realmente no funciona bien en un formato de control de calidad. – sinemetu1

+0

La respuesta (explicar) se publicó como comentario directamente en la pregunta del mensaje. –

-1

A partir de jquery 1.6 (ver docs for .attr), el .attr cambió de devolver una cadena vacía a devolver undefined.

Abrir jsFiddle http://jsfiddle.net/QVqXC/ y cambiar la versión de jQuery cargado y ver cómo cambia el mensaje de salida.