2016-05-27 78 views
0

所以我想通过一类手风琴jquery对象迭代,检查哪些是开放的,将它们添加到数组中,然后(重置手风琴之后)重新打开手风琴之前开放。这似乎是一个非常简单的问题,我很抱歉,但在我的搜索中,似乎问题只是关于迭代使用jquery,而不是迭代jquery对象的数组。我真的找不到答案。动态打开jQuery手风琴阵列

这是我目前有,这是由于某种原因不起作用。首先,已经开放了一批已经开放的手风琴。

 $(".accordionClass").each(
      function(){ 
       if($(this).accordion("option", "active") !== false) { 
        activeArray.push($(this)); 
       } 
      } 
     ); 

这似乎工作。至少,activeArray.length给出了正确数量的对象。

然后,我试着在它们重新初始化之后打开这个数组中的所有手风琴。

$.each(activeArray, 
     function(){ 
      $(this).accordion({ active: 0 }); 
     } 
    ); 

没有骰子。他们不打开。有任何想法吗?

+1

作为活动数组已经包含jquery对象..你可以做this.accordian({active:0})。但是更好的解决方案可以像建议的那样将DOM对象保存为数组而不是jQuery对象。希望你不重新创建DOM对象? – Ankit

回答

0

解决到问题

在问题书面,你是推jQuery的对象($(this))到您阵列,读出来,然后在另一个jQuery选择包装的对象。

您应该改为推送本机DOM对象this


问题的解决方案

的具体问题就在这里(在这个答案的评论中发现,而不是问题本身)是该对象被销毁,然后类似物体正在创建(从相同的标记)。这通常是不好的做法,但它也会导致问题:在被读出时,被推入数组的this引用的对象不再存在。

取而代之,您应该推this.id,然后使用jQuery重新选择副本$('#'+this)

+0

还没有。我也尝试了其他方式打开,如 '$(this).accordion(“option”,“active”,0);' 没有结果,所以我真的不知道什么问题是。 –

+0

对不起,我忍不住了;我是afk。尝试使用JSON.stringify调查对象内容。并尝试让所有的手风琴开放(或只是一个特定的手风琴)以找到正确的方式来打开它们。 – Kittsil

+0

嗯yeeeah。因此''JSON.stringify(activeArray);'在仅使用'this'填充的数组上完成时给出'[{},{},{}]''。 stringify用'$(this)'填充时,给出了[{“0”:{},“context”:{},“length”:1},{“0”:{},“context” }, “长度”:1},{ “0”:{}, “上下文”:{}, “长度”:1}]'。我必须承认,我对JSON或jQuery知之甚少,无法确定这些是否如预期的那样,或者完全被破坏。同时,使用'$(“。accordionClass”)来打开所有手风琴是相当容易的。每个( \t \t \t函数(){ \t \t \t \t $(本).accordion({活性:0}); \t \t \t} \t \t);'这么看来,问题在于在数组中。 。 –