2

文字列と変数を使用してjQueryDOMオブジェクトを作成できない理由を理解しようとしています(変数も文字列であっても)。

//Works
var test1 = $('#test');
test1.addClass('success');

//Works
var test2 = '#test';
$(test2).addClass('success');

//Fails
var test3 = 'test';
$('.' + test3).addClass('success');

//Fails
var id = 'test';
var test4 = '.' + id;
$(test4).addClass('success');

これがデモンストレーションするjsFiddleです。

おそらく基本的なものが欠けているように感じますが、これに関するjQueryドキュメントには何も見つかりません。

編集:ああ、私は例で間違ったセレクターを使用したことに気づいたはずです。jsFiddleが実際に修正されたので、mcpDESIGNSの回答を選択しました。ただし、コードでエラーが発生していました。(「キャッチされない例外:構文エラー、認識されない式:。」)誰かが興味を持った場合に備えて、次のようになりました。

URLの現在のハッシュを取得し、文字列を変数として保存し、それを使用してjQuery DOMオブジェクトを作成し、そのオブジェクトを関数に渡そうとしていました。

var hashTag = window.location.hash;
hashTag = hashTag.substr(1);

currentObject = $('.'+hashTag);
setSpriteX(currentObject);

URLにハッシュがない場合は、自分が考慮していないことがわかりました。hashTag = 'defaulthash';設定する前に追加するだけで済みましたcurrentObject

4

6 に答える 6

3

クラスではなくIDで選択しようとしているので、持っている必要があり$('#' + test3)ます。var test4 = '#' + id;

. // class selector

# // ID selector

于 2012-09-04T19:37:36.217 に答える
0

'。' セレクターはクラス別ですが、上記のものはID別です。変化 '。' に '#'。

于 2012-09-04T19:37:49.250 に答える
0

jQuery構文に関する限り、すべてを正しく行っています。問題は、.セレクターがIDではなくクラス用であるということです。使用#して、あなたは良いはずです。

于 2012-09-04T19:38:09.230 に答える
0

の代わりにピリオドを使用しています#。これはIDであり、クラスではありません。

//Fails no more
var test3 = 'test3';
$('#' + test3).addClass('success');

//Fails no more
var id = 'test4';
var test4 = '#' + id;
$(test4).addClass('success');

http://jsfiddle.net/Guffa/QeWLu/2/

于 2012-09-04T19:39:11.133 に答える
0

ジェイピー、

  1. これは最良のメソッドであり、キャッシュされたオブジェクトがaddClassに使用されているため、従う必要があります

    //動作しますvartest1= $('#test');

    test1.addClass('success');

  2. これも機能しますが、オブジェクトをキャッシュしないため、最初の方法に比べてパフォーマンスが低下します。好ましくない

    //
    動作しますvartest2='#test';

    $(test2).addClass('success');

3. IDではなくクラスに基づいて要素を選択しているため、これは機能しません

   //Fails
   var test3 = 'test';
   $('.' + test3).addClass('success');

以前と同じ間違いがありました。クラス名ベースのセレクターを使用しています

//Fails
var id = 'test';
var test4 = '.' + id;
$(test4).addClass('success');

詳細については、StackoverflowのJqueryのベストプラクティスを確認してください

于 2012-09-04T19:47:00.323 に答える
0

jsFiddleコードにはIDしかありませんが、クラスでIDを選択しようとしています

于 2012-09-04T19:48:29.813 に答える