在使用jQuery的Backbone.js中,在视图中选择元素的正确方式是什么

In Backbone.js using jQuery, what is the correct way to select an element within a view?

本文关键字:元素 方式 是什么 选择 视图 Backbone js jQuery      更新时间:2023-09-26

在下面的代码中,我有两个jQuery选择器,它们似乎工作正常。有没有理由选择其中一种而不是另一种,或者有没有其他更可取的方式?

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/

为了简洁起见,我通常使用Backbone提供的快捷方式:

this.$('#username')

$('#username', this.el); 的别名

然而,你使用的任何选择方法都会很好地发挥作用。你的例子中的另外两种方法都很好。

首先,我建议您不要在一个页面上有多个id相同的元素。尽量避免这种情况。在寻找元素时,我认为find比选择通过上下文的元素要好,因为上下文出于性能原因是好的,但findcontext快,所以它更好,也更紧凑和可读。

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