JavaScript中的动态变量名称

时间:2011-03-03 19:32:41

标签: javascript variables

编辑:没关系。找出问题所在。刚刚将高度设为数组并命名每个id。明镜。无论如何,谢谢。

我已经搜索过,而且没有太多关于此事。我有一个简单的脚本,只是动画下拉菜单在悬停时滑出。问题是如果我在两个或多个菜单项之间快速来回移动,我可以覆盖在每个悬停开始时设置的height变量。我有一个解决方法,在关闭之后再修复它,然后通过将高度重置为自动屏幕时重新启动,但我不会阻止它发生。通常情况下,我会使用其他语言制作一个动态的,如:

$height = $(this).attr("id")+"height";

alert($$height);

//which would theoretically alert the height of whatever triggered it. 

有没有办法在jQuery中执行此操作,因此调用该函数的每个元素都有自己的高度变量?

EDIT2:既然有兴趣我会粘贴整个东西。

   $("#NavMenu > li").hover(
           function () {
               var height = {};
               height[$(this).attr("id")] = $(this).find("ul").css("height");
               $(this).find("ul").css("height", "0px");
               $(this).find("ul").css("left", "auto");
               $(this).find("ul").animate({ height: height[$(this).attr("id")] }, 300)
           },
            function () {
                $(this).find("ul").css("left", "-999em");
                $(this).find("ul").css(height, height[$(this).attr("id")])
            }
        )

2 个答案:

答案 0 :(得分:1)

是的,你可以这样做:

$('.obj').get(0).key = 'value';

$('.obj').get(0)['key'] = 'value'

虽然最好使用.data()

$('.obj').data('key', 'value');

提示

1。您可以链接多个呼叫,如下所示:

$('.obj').css('color', 'red').data('key', 'value');

2. 您可以将对象传递给.css()

$('.obj').css({
    'width': 100,
    'height': 100
});

3. 如果您不更改其他CSS属性,则可以使用.width().height()设置并获取元素的宽度:

HTML

<div id='box'></div>

CSS

#box {
    width: 200px;
    height: 100px;
}

的JavaScript

var $box = $('#box');
// 200x100
alert( $box.width() + 'x' + $box.height() );

4。您可能已在上一个示例中注意到我在变量中保存了对$('#box')的引用。在某些情况下,您不能使用链接,如下所示:

var $box = $('#box');
setTimeout(function() {
    $box.animate({ 'width': 100 }, 100);
}, 1000);
setTimeout(function() {
    $box.animate({ 'height': 200 }, 100);
}, 1000);

如果必须这样做,总是保存对该元素的引用 - 即所谓的缓存。否则jQuery必须多次搜索它。

答案 1 :(得分:0)

我不确定你为什么要制作自己的滑入和滑出方法。

你可以在方法的括号内使用jquery的hide()和show()方法(甚至切换)动画

相关问题