如何更好地编写这个jQuery脚本?

时间:2013-04-11 18:36:55

标签: jquery variables href

以下是工作脚本。

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

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

现在,在快速告诉我之前,如果它正在发挥作用,那该怎么了?&#34;我还有更多的类要添加,所以我试图摆脱冗余。我知道如何将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>

这不起作用。

在评论我之前应该首先学习jQuery的基础知识并且因为我无法替换var $ this = $(this)之前,我并不是很苛刻。 to $ this.each(function(){proper?

我是jQuery的新手,我想通过在这里提问来学习。说我首先要学习基础知识并不是很有建设性。如果你没有帮助那么好,但所有这些批评是什么?

2 个答案:

答案 0 :(得分: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对象。

答案 1 :(得分:3)

我想澄清一般情况下$this = $(this);的使用以及您对它的使用。

使用$(this)与使用this$()包装到jQuery对象中是一回事。基本上,如果this与元素span.test相同,那么$(this)相当于将$("span#test")带到您正在查看的“索引”处(我使用松散地“索引”这个词。

现在,这在性能方面意味着什么?这意味着每次使用$(this)时,您都会使用this并从中创建一个对象。这样做通常比最初查找$(this)并将其设置为变量(例如$this)的成本高得多。 然而,(这里来了!)在您的情况下,每次声明它时,您只使用$(this)一次。由于程序必须进行一次$(this)(因为它必须找到它以将其设置为变量或立即使用),所以在您的情况下会更好不要使用$this而是跳过变量的创建和使用(这实际上会使你的情况更加昂贵),而是直接使用$(this)

但是,通常情况下,使用$this是正确的。为了理智,当我编码时,我最初总是使用$this,并在完成后删除它,如果有必要的话。