2012-03-05 16 views
5

Wordpressのテーマでjquery関数に問題があります。私は厳密にこの機能を厳密に使用しています。この関数は、Wordpressアップローダー経由でアップロードされたImageのIDを返します。.attr( 'class')はjQuery()で未定義です

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

両方のアラートを把握するだけであり、何が起こる:

は、ここで関連する部分です。警告(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" /> 

警告しかし、警告(jt)は "未定義"を返します。

もしあなたが手伝ってくれれば、それは素晴らしいことだろう。

1月

+0

コードが意味をなさない... htmlがどのように定義されるかを表示し、コンテキスト引数としてhtmlを使って何をしようとしているかを説明してください。 – charlietfl

+0

あなたはアラート(HTML)をどうしますか?それはjqeryオブジェクトですか? .html()経由で – Liviu

+0

タグの間に内容を尋ねます。タグの属性ではありません。 –

答えて

6

せずにHTML変数とコンテキスト引数の使用は正しくありません。 jQuery documentationでは、そのコンテキスト引数はDOM要素、ドキュメントまたはjQueryオブジェクトである必要があります。 HTMLの文字列にすることはできません。

あなたが持っているものが文字列であり、それをDOMオブジェクトにしたい場合は、さまざまな方法があります。

このコードは、html文字列からDOMオブジェクトを作成し、そのDOMオブジェクトからclass属性を取得します。あなたは、それはここで働いて見ることができます

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(' '); 

http://jsfiddle.net/jfriend00/phnED/

+0

ありがとう!それはうまくいった! – jabre

0

attr('class')が機能します。おそらくあなたのコンテキストvar(html)は未定義です。

ちなみに、データを格納するには、クラスの代わりにHTML5 custom data- attributesを使用することが理にかなっています。

+0

htmlが定義されています。私の元の質問にhtmlの内容を見ることができます。私はこのコードが最善の解決策ではないことを知っています。しかし、私はWordPressのイメージアップローダーを使用したいと私の質問のこのイメージタグは、それが返す唯一のものです。 私はテーマを書いており、コアファイルを編集することができないので、返すものには何の影響もありません。 – jabre

0

与えられたHTML文字列を持つ場合は、これが正常に動作するはずです:

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

いいえ、それは動作しません。 jtは未定義です。 – jabre

2

あなたの問題はここにある:あなたがしているので、

jQuery('img', html) 

コンテキストはhtmlと明らかにhtmlではイメージですそれが見つからないimgの中にimgを探しています。

EDIT:
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 klass = $(html).attr('class'); 

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

あなたはjQuery( 'img'、html)の代わりに何を使うことができますか? – jabre

+0

私は他の人にも正しい答えがあると思うが、私は自分の答えを編集したばかりだ。それはうまくいくはずです。 – elclanrs

1

コンテキスト変数htmlはその時点で定義されていない、とあなたはDOMとしてそれを定義する必要がありますイメージが子要素である要素。

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

HTML

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

あなたが使用しているコードについて説明していれば、おそらくOPに役立つでしょう。説明なしでコードを書くだけでは、QA形式ではうまく機能しません。 – sinemetu1

+0

答え(説明)は投稿の質問にコメントとして投稿されました。 –

0

問題は、2番目のパラメータはjQueryオブジェクトのコンテキストで、jquery documentから、var jt = jQuery('img', html)です。変更されたプログラムをhttp://jsfiddle.net/hYKnd/にチェックしてください。

-1

jquery 1.6(docs for .attrを参照)の時点で、.attrは空の文字列を返してundefinedに戻りました。

これを開いてjqueryのバージョンを変更し、出力メッセージの変更方法を確認します。

関連する問題