2012-01-19 33 views
11

在下面的代碼中,我有兩個似乎正常工作的jQuery選擇器。是有理由做一個而不是另一個,還是有另一種首選方法?在使用jQuery的Backbone.js中,在視圖中選擇元素的正確方法是什麼?

var val1 = $("#username", this.el).val() 
var val2 = $(this.el).find("#username").val(); 

我知道,不應該有具有相同ID的多個元素,但如果有具有相同ID的多個元素,什麼是在視圖中只選擇元素(見例的最佳方式下面是用戶名)。

<body> 
    Username: <input type="text" id="username" /><br /> 
    <br /><br /> 
    <div id="login"> 
     Username: <input type="text" id="username" /><br /> 
     <button id="loginButton">Login</button> 
    </div> 

    <script type="text/javascript"> 
     var LoginView = Backbone.View.extend({ 
      el: "#login", 
      events: { 
       "click #loginButton": "login" 
      }, 

      login: function() { 
       var val1 = $("#username", this.el).val() 
       var val2 = $(this.el).find("#username").val(); 

       console.log(val1); 
       console.log(val2); 
      } 
     }) 
     var loginView = new LoginView(); 
    </script>  
</body> 

---------------------更新--------------------- ---

我創建了jsFiddle示例,以便可以爲其他人查看一個工作示例。 http://jsfiddle.net/BarDev/9QpKy/

回答

25

爲了簡便起見,我通常使用Backbone-provided shortcut

this.$('#username') 

這是$('#username', this.el);

別名然而,您使用任何選擇方法將工作做好就夠了。在你的例子中,其他兩種方法都很好。

2

首先,我建議你不要在頁面上有多個具有相同ID的元素。儘量避免這種情況。爲了找到一個元素,我認爲find比選擇傳遞上下文的元素更好,因爲上下文有利於性能,但findcontext更快,所以它更好,而且它更加緊湊和可讀。

var val2 = $(this.el).find("#username").val(); 
+1

我沒有檢查,但我認爲,當通過id選擇上下文並不那麼重要的性能明智。但是在其他情況下,它仍然是一個好建議 – Guillaume86

+0

@ Guillaume86 - 是的,如果id是唯一的,那麼不需要在jQuery對象中傳遞find的上下文,那麼可以直接使用id選擇器。 – ShankarSangoli

相關問題