如何在JavaScript中获取外部元素值

时间:2012-03-02 03:06:04

标签: javascript jquery

我有以下jQuery代码:

  $('.active #search').on('mouseout', function () {
    $('#search_box #search').not('.active').each(function(){
      this.value = $('.active #search')[0].value;
    })
  });

它有效,但我必须两次调用$('。active #search')。如何在内部函数中引用$('。active #search')数组?

P / S:我知道我会抱怨给多个元素提供相同的ID,但这似乎是由Rails自动生成的(text_field_tag)。

4 个答案:

答案 0 :(得分:2)

您可以执行以下操作。我添加了self = $(this)

    $('.active #search').on('mouseout', function () {
          var self = $(this);
          $('#search_box #search').not('.active').each(function(){
                this.value = self[0].value;
          });
  });

以下是关于'this'关键字的非常好解释的链接,由Jeffrey Way解释

tutsplus.com/lesson/the-this-keyword

答案 1 :(得分:2)

我认为this是您正在寻找的:

$('.active #search').on('mouseout', function () {
    var val = $(this)[0].value; //cache value of $('.active #search').
    $('#search_box #search').not('.active').each(function () {
        this.value = val;
    })
});

答案 2 :(得分:1)

您可以使用$(this)代替$('.active #search')

答案 3 :(得分:1)

有几种方法可以实现这一目标:

var activeSearch = $('.active #search');
activeSearch.on('mouseout', function () {
    $('#search_box #search').not('.active').each(function(){
        this.value = activeSearch.val();
    })
});

请注意,由于这是您要查询的ID,因此您应该只有一个元素,因此您可以将activeSearch[0].value替换为activeSearch.val();

第二种方式:

$('.active #search').on('mouseout', function () {
    var activeSearch = $(this);
    $('#search_box #search').not('.active').each(function(){
        this.value = activeSearch.val();
    })
});

在事件处理程序$(this)中将为您提供事件发送方的jquery对象。您可以通过忽略jquery并通过执行以下操作来使用简单元素来进一步简化它:

$('.active #search').on('mouseout', function () {
    var activeSearch = this;
    $('#search_box #search').not('.active').each(function(){
        this.value = activeSearch.value;
    })
});

这与上面相同,但你不处理jquery对象。

您最终使用的内容取决于您,但最终的代码段将是我的首选方式。