0

以下は、作業スクリプトです。

<script type="text/javascript">
window.lang = new jquery_lang_js();
$(document).ready(function() {  
    window.lang.run();
 $(".jp").click(function (e) {
 e.preventDefault();      
    var $this = $(this);        
    var id = $this.attr('href');
    window.lang.change('jp');
});

 $(".en").click(function (e) {
 e.preventDefault();      
    var $this = $(this);        
    var id = $this.attr('href');
    window.lang.change('en');
});
});

</script>

<a href="#" class="en">Switch to English</a>
<a href="#" class="jp">Switch to Japanese</a>

///////////////////////////////////////

さて、「それが機能している場合、何が問題なのですか?」とすぐに言う前に。追加するクラスがもう少しあるので、冗長性を取り除こうとしています。href を同じ関数と組み合わせる方法は知っていますが、ここでは、各クラスには変数関数があり、これを自分で理解することはできません。

これは私がこれまでに試したことです。

<script type="text/javascript">
window.lang = new jquery_lang_js();
$(document).ready(function() {  
    window.lang.run();
  $this.each(function(){ 
 $("a").click(function (e) {
 e.preventDefault();      
  // var $this = $(this);       
    var id = $this.attr('href');
    window.lang.change('jp');
    window.lang.change('en');
});
});
});

</script>

そして、これは機能していません。

var $this = $(this); を置き換えることができないという理由だけで、ここで質問する前にまず jQuery の基礎を学ぶべきだとコメントするのは少し厳しいではないでしょうか。$this.each(function(){ ちゃんと?

私はjQueryが初めてで、ここで質問して学習しようとしています。最初に基本を学ぶべきだと言うのはあまり建設的ではありません。あなたがその罰金を助けていないのに、この批判は何のためですか?

4

2 に答える 2

5

この種のシナリオではデータ属性を使用するのが好きです...

var lang = new jquery_lang_js();
$(function() {  
    lang.run();

    $(".lang").click(function (e) {
        var ln = $( this ).data( "lang" );

        if ( ln ) { 
            lang.change( ln );
        }

        e.preventDefault();
    });
});


<a href="#" class="lang" data-lang="en">Switch to English</a>
<a href="#" class="lang" data-lang="jp">Switch to Japanese</a>

また、thisこのようなイベント リスナーのコールバック内では、クリックされた実際の DOM 要素を参照します。そのDOM要素を取得してラップすると$( this )、基本的に、クリックされた要素を含むjQueryオブジェクトが得られます。

于 2013-04-11T18:46:43.173 に答える
3

$this = $(this);一般的な の使用と、あなたの使用について明確にしたいと思います。

を使用することは、それを取得して jQuery オブジェクトにラップすることと$(this)同じです。基本的に、 ifは elementと同じものであり、あなたが見ている "index"を取得することと同じです(私は "index" という言葉を大まかに使用しています)。this$()thisspan.test$(this)$("span#test")

さて、これはパフォーマンスの観点から何を意味するのでしょうか? これは、使用するたびに、そこからオブジェクトを取得して作成して$(this)いることを意味します。これを行うと、最初に変数を見つけて などの変数に設定するthisよりも、一般にオーバーヘッドが大幅に増加します。ただし、(ここに来ます!)あなたの状況では、宣言するたびに1回しか使用していません。プログラムはとにかく一度作成する必要があるため(変数に設定するため、またはすぐに使用するためにそれを見つける必要があるため)、あなたの状況では、使用せず、代わりに作成と使用をスキップする方がよいでしょう変数 (実際には状況がより高価になります) と、代わりに , を直接使用するだけです。$(this)$this$(this)$(this)$this$(this)

ただし、通常は を使用するのが正しいでしょう$this。正気を保つために、私がコーディングするときは$this、最初は常に を使用し、必要に応じて終了したら削除します。

于 2013-04-11T18:47:49.607 に答える