2012-03-05 12 views
5

Mam problem z moją funkcją jquery w kompozycji wordpress. Użyłem właśnie tej funkcji ciężkich czasów i zadziałało. Funkcja zwraca identyfikator obrazu, który został przesłany za pomocą narzędzia do przesyłania wiadomości..attr ("klasa") jest niezdefiniowana na jQuery()

Oto odpowiednia część:

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

Oba alarmy są tylko tam, aby dowiedzieć się, co się dzieje. alert (html) zwraca to:

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

ale alert (jt) zwraca "niezdefiniowany".

Każdy pomysł? Byłoby wspaniale, gdybyś mógł pomóc.

Jan

+0

kod nie ma sensu ... pokaż, jak html jest zdefiniowany i wyjaśnij, co próbujesz zrobić z html jako argumentem kontekstowym – charlietfl

+0

co otrzymujesz na ostrzeżenie (html)? czy to obiekt jqery? – Liviu

+0

poprzez .html() pytasz o treść między tagami. nie jest dla atrybutów tagów. –

Odpowiedz

6

Używanie argumentu kontekstowego ze zmienną HTML jest nieprawidłowy. Zgodnie z jQuery documentation, ten argument kontekstowy powinien być elementem DOM, dokumentem lub obiektem jQuery. Nie może być ciągiem znaków HTML.

Jeśli masz ciąg znaków i chcesz go utworzyć w obiekcie DOM, możesz to zrobić na kilka sposobów.

Ten kod utworzy obiekt DOM z posiadanego ciągu znaków html, a następnie pobierze atrybut klasy z tego obiektu 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(' '); 

Widać to działa tutaj: http://jsfiddle.net/jfriend00/phnED/

+0

Dzięki! To się udało!! – jabre

0

attr('class') działa. Prawdopodobnie twój kontekst var (html) jest po prostu niezdefiniowany.

Nawiasem mówiąc, do przechowywania danych ma sens stosowanie zamiast klas klas HTML5 custom data- attributes.

+0

jest zdefiniowany html. Możesz zobaczyć zawartość html w moim oryginalnym pytaniu. Wiem, że ten kod nie jest najlepszym rozwiązaniem. Ale chcę użyć programu do przesyłania obrazków z wordpressa, a ten tag obrazu w moim pytaniu to jedyna rzecz, którą zwraca. Nie mam wpływu na to, co powraca, ponieważ piszę motyw i edycja plików rdzenia nie jest opcją. – jabre

0

Kiedy mając daną HTML-string, to powinno normalnie pracować:

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

Nie, to nie działa. jt jest wciąż niezdefiniowany. – jabre

2

Twój problem jest tutaj:

jQuery('img', html) 

Kontekst jest html i widocznie html jest obraz tak jesteś szukając img wewnątrz img, której nie znajdzie.

EDIT:
Jeśli html jest <img src="http://www.xyz.com/files/2012/03/stage.jpg" alt="" title="" width="1000" height="371" class="alignnone size-full wp-image-6" /> następnie można pobrać klasy tak:

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

Czy masz jakieś sugestie, co mogę użyć zamiast jQuery ("img", html)? – jabre

+0

Myślę, że inni również mają właściwą odpowiedź, ale właśnie zredagowałem swoją odpowiedź. To powinno działać. – elclanrs

1

Zmienna kontekst html podałeś jest niezdefiniowane w tym czasie, i należy go określić jako DOM element, którego obrazem jest dziecko.

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

bez html

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

Byłoby prawdopodobnie pomocne dla OP, jeśli wyjaśnisz kod, którego używasz. Napisanie kodu bez wyjaśnienia nie działa dobrze w formacie QA. – sinemetu1

+0

Odpowiedź (wyjaśnij) została opublikowana jako komentarz do pytania o wpis. –

-1

Od wersji jquery 1.6 (patrz docs for .attr) zmieniono .attr z zwracania pustego ciągu na zwrot undefined.

Otwórz ten plik jsfiddle http://jsfiddle.net/QVqXC/ i zmień załadowaną wersję jquery i zobacz, jak zmienia się komunikat wyjściowy.

Powiązane problemy