1

私が取り組んでいるいくつかのjQueryコードに苦労しています。私も期待どおりに動作しないこの単純な例に問題を絞り込みました:

jsFiddle: http://jsfiddle.net/HypYT/


HTML

<div id="a">a: <span>A</span></div>
<div id="b">b: <span>B</span></div>​

jQuery

jQuery.each( ["#a", "#b"], function(){
    alert(this);    // alerts "#a" and "#b"
    $(this).hide(); //not working
    $('#b').hide(); //working
});​

ここで何が起こっているのか、誰にも洞察がありますか?

4

4 に答える 4

6

SLaks の回答に追加すると、渡された arg を使用できます.each。下記参照、

jQuery.each( ["#a", "#b"], function(idx, el){
    alert(this);    // alerts "#a" and "#b"
    $(el).hide(); 
    //$('#b').hide(); 
});​

またはあなたができる

var elToHide = $(["#a", "#b"].join()).hide();
$(elToHide.join()).hide()

デモ: http://jsfiddle.net/HypYT/2/

于 2012-09-19T15:27:08.863 に答える
6

関数が文字列 (または他のプリミティブ) で呼び出されるthisと、ボックス化されたオブジェクトになります。
typeof this返品致しませ"object""string"
これはjQueryを壊します。(しゃれは意図されていません)

これを強制的に文字列プリミティブに戻すことで、これを修正できます。

$(String(this)).hide()

書くことで、任意のプリミティブに対してこれを修正できます

var self = this.constructor(this);

ただし、渡された 2 番目の引数を使用する.each()と、そもそもボックス化が回避されるため、高速になります。

于 2012-09-19T15:25:36.730 に答える
1

あなたはただする必要があります:

$('#a, #b').hide();
于 2012-09-19T15:27:25.780 に答える
1

各関数はこのように機能します (http://api.jquery.com/jQuery.each/)

$.each([52, 97], function(index, value) { 
  alert(index + ': ' + value); 
});

だからあなたの場合

jQuery.each( ["#a", "#b"], function(index, value){
    alert(value);    // alerts "#a" and "#b"
    $(value).hide(); //not working
});

説明は (リンクから取得) で、「値は this キーワードからもアクセスできますが、Javascript は、単純な文字列または数値であっても、常に this 値をオブジェクトとしてラップします。」

于 2012-09-19T15:31:27.617 に答える