同时使用2个变量

时间:2011-09-20 23:12:33

标签: jquery variables selector

我该怎么做?

$(function() {

   var foo = $('#foo'),
       bar = $('#bar');

    $('body').click(function() {

        $(foo,bar).css({color: 'red'}); 

    });

});

演示:http://jsfiddle.net/each/RGZ4Z/ - 只有foo变红

编辑:我能否强调一点,我知道我可以轻松做到:

$('#foo,#bar').css({color: 'red'});

我只是询问变量的使用......

2 个答案:

答案 0 :(得分:8)

可能你想要的是:

foo.add(bar).css({color: 'red'});

这是一段演示代码,展示了它的工作原理:http://jsfiddle.net/jfriend00/3Ep6J/

根据您的需要,我可以考虑三种选择:

  1. var items = $('#foo, #bar')
  2. $('#foo, #bar').css({color: 'red'});
  3. foo.add(bar).css({color: 'red'});
  4. 并且,每个选项的更多细节:

    1)您可以在开头创建一个jQuery对象,其中包含两组对象:

    var objs = $('#foo, #bar');
    

    然后再这样做:

    objs.css({color: 'red'}); 
    

    2)或者只是一次完成所有事情:

    $('#foo, #bar').css({color: 'red'}); 
    

    3)或者,如果你已经有foo和bar的单独jQuery对象,你可以将一个jQuery对象中的项添加到另一个jQuery对象,然后执行你的操作:

    var foo = $('#foo'),
        bar = $('#bar');
    

    然后,执行此操作:

    foo.add(bar).css({color: 'red'}); 
    

    注意:有点违反规范,选项3)不修改foo jQuery对象,add方法返回一个新的jQuery对象,其中添加了bar项。

答案 1 :(得分:2)

+1给jfriend00的回答,但我想我会先解释为什么你的第一个没有工作。

jQuery "constructor"有三个方法签名(基本上):

  1. $(selector[, context])用于从现有元素创建jQuery对象
  2. $(html[, ownerDocument])用于创建新元素
  3. $(callback)作为$(document).ready(callback)
  4. 的别名

    您正在使用第一个选项,而selector是一个预先存在的jQuery对象(很好),但是通过添加bar参数,这意味着它将该元素视为上下文。基本上:“给我一个包含所有元素foo 的结果集,它们存在于元素bar”中。

    另外,如果你知道你已经在一个变量中有了一个jQuery对象,那么将它再次包含在$()中是浪费的。

    bar = $('#bar');
    $(bar).show();  // unnecessary!
    bar.show();     // better!
    

    为了帮助我记住,我总是用$:

    作为jQuery变量的前缀
    $bar = $("#bar");
    $bar.show(); // less ambiguous! woo!