Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将两个变量设置为一个_Javascript_Jquery_Arrays_Variables - Fatal编程技术网

Javascript 如何将两个变量设置为一个

Javascript 如何将两个变量设置为一个,javascript,jquery,arrays,variables,Javascript,Jquery,Arrays,Variables,我有这个问题,我找不到任何激进的答案 那么,有没有可能用jQuery将两个变量设置为一个,smth如下所示: var $self = { car_img_stage: $('.car_img_stage'), vis_home: $('#vis_home') } 然后像这样使用: $self.animate({ 'margin-left': '-1200px' }, 600) 谢谢你的帮助 您可以创建一个组合选择

我有这个问题,我找不到任何激进的答案

那么,有没有可能用jQuery将两个变量设置为一个,smth如下所示:

    var $self = {
        car_img_stage: $('.car_img_stage'),
        vis_home: $('#vis_home')
    }
然后像这样使用:

    $self.animate({
        'margin-left': '-1200px'
    }, 600)

谢谢你的帮助

您可以创建一个组合选择器来完成相同的任务:

$self = $('.car_img_stage,#vis_home');
您可以这样做:

var some_things = $('.car_img_stage, #vis_home');

some_things.animate({
    'margin-left': '-1200px'
}, 600)

有几种方法可以实现这一点-

它们都以相同的方式设置动画:

$self.animate({
    'margin-left': -1200
}, 600);
如果要缓存选择器并在以后单独使用它们,则“添加”也很有用

//cached selectors
$car_img = $('.car_img_stage');
$vis_home = $('#vis_home');
$self = $car_img.add($vis_home);

$car_img.animate({
    'color': 'red'
}, 600);

$vis_home.animate({
    'height': 200
}, 600);

$self.animate({
    'margin-left': -1200
}, 600);
您还可以让选择器保持原样,并在其中循环。不建议采用这种方式,但在技术上可行

var $self = {
    car_img_stage: $('.car_img_stage'),
    vis_home: $('#vis_home')
}

for (var each in $self){
    $self[each].animate({
        'margin-left': -1200
    }, 600);
}
下一个注意事项与原始问题无关,但在处理设置多个选择器的动画时,要记住这一点

请注意,当设置多个选择器的动画时,附加的任何回调都会为每个已设置动画的项目触发。这与淡出链接列表(而不是包含链接的包装器)或类似的内容有关。要避免此问题,您可以使用,如下所示:

$self = $('.car_img_stage,#vis_home');

$self.animate({
    'margin-left': -1200
}, 600, function(){
    //callback code here to happen for every animated element.
}).promise().done(function(){
    //callback code here, to happen once when ALL animations are complete.
});
您可以关闭以下两个回调函数中的一个或两个:

只是回拨:

$self.animate({
    'margin-left': -1200
}, 600, function(){
    //callback code here to happen for every animated element.
});
只是一个承诺:

$self.animate({
    'margin-left': -1200
}, 600).promise().done(function(){
    //callback code here, to happen once when ALL animations are complete.
});

作为我的补充回答,我已经找到了一些其他的解决方法,这是可行的

var car_img_stage = $('.car_img_stage'),
    vis_home = $('#vis_home');

var self = jQuery.makeArray(vis_home,car_img_stage);
和行动

self.animate({
    // some animate action
}, 600);

但是我可以在一些动作之后使用其中一个吗?这就是为什么我像贝娄一样抱歉,但是你的英语坏了。我不清楚您想要实现什么。在变量明确区分它们为jQuery对象之前使用
$
。这不是一种不常见的做法,尽管我通常自己不会这样做。
self
将全局
窗口隐藏起来。self
,变量不是一个好名字。如果不将
$.fn
中的所有方法复制到对象上,并让对象对每个方法执行一些附加逻辑,以确保在使用
$self.animate()
时正确的元素是有针对性的,则无法实现您的请求。只需将它们缓存在两个单独的变量中,当您想同时影响这两个变量时,请使用
one.add(theother).dosomething()
ok,但是,我可以将它们设置在某种数组中吗?像这样:
var car\u img\u stage=$('.car\u img\u stage'),vis\u home=$(''vis\u home')并在
var self=$[vis_home,car_img_stage]之后使用?否,因为无法从jQuery对象数组创建jQuery对象。它们都必须转换为一个dom元素,例如,
var car\u img\u stage=$('.car\u img\u stage').get()确定,thx用于解释确定,我发现:
var self=jQuery.makeArray(vis\u home,car\u img\u stage)
并且它正在工作。添加了一个与您关于使用单独选择器的问题相关的部分。正如jbabey在上面指出的,您确实不想在此处使用“self”作为变量名。删除了我以前关于它不工作的评论。它在这里工作的例子-
var car_img_stage = $('.car_img_stage'),
    vis_home = $('#vis_home');

var self = jQuery.makeArray(vis_home,car_img_stage);
self.animate({
    // some animate action
}, 600);