jquery关联数组

时间:2010-11-15 18:36:43

标签: jquery bytearray

需要一些帮助,我确信这是相当容易的jquery

我有以下重复标记(几个列表项)

<li>
<div class="answer">
<p><select class="dropdown">
..options..
</select></p>
</div>
<div class="commentBox">
..content..
</div>
</li>

根据所加载页面时所选选项的值,将显示/隐藏“commentBox”。

我尝试过以下jquery

var dd = $('.dropdown');
var com = $('.commentBox');


dd.each(dd, function(n, val){
if($(this).val() == 'whatever'){
   com[n].setStyle('display', 'none');
}
});

我收到错误“b.apply不是函数”

所以在我的脑海中,它应该如何工作 - 如果它是第一个选择下拉列表,则显示/隐藏第一个“commentBox”div。如果是第二个下拉列表,则显示/隐藏第二个“commentBox”div。等等。

我认为我在尝试各种jquery技术时遇到了麻烦,所以我相信这里有很多种可能性。 感谢

3 个答案:

答案 0 :(得分:1)

您的问题是您将额外(第一个)参数传递给each each仅在静态调用时将集合作为第一个参数 换句话说:

$.each(dd, function() { ... });

dd.each(function() { ... });

请注意,您可以通过将代码更改为

来使代码更清晰
$(this).closest('li').find('.commentBox').hide();

答案 1 :(得分:0)

calling .each() like that时,您只给它一个参数function

dd.each(function(n, val){
    if($(this).val() == 'whatever'){
       com[n].setStyle('display', 'none');
    }
});

如果call jQuery.each like this

,您可以传递2个参数
$.each(dd, function(n, val){
    if($(this).val() == 'whatever'){
       com[n].setStyle('display', 'none');
    }
});

第二个版本用于迭代任何类型的集合。

你把两者结合起来。


编辑:我想我最好先解释一下setStyle是OP的代码,并不是眼前问题的直接原因。

我无法知道OP是否使用其他方法扩展了DOM元素。因此,我只能假设这种方法的放置是正确的。

答案 2 :(得分:0)

尝试

var dd = $('.dropdown'),
    com = $('.commentBox');

dd.each(function(n, ele) {
    if( $(ele).val() == 'one') {
        com.eq(n).css('display', 'none');
    }
});

使用.eq(n)而不是[n]后者会产生DOM节点,而我会生成一个jQuery对象,您可以在其上调用css()(如您所见,我从{{1}切换无论如何,setStyle)的功能是什么。


使用Slakks建议的增强功能,您最终会得到更好的可读代码

css()