JavaScript / jQuery: проблема с объектом в IE - PullRequest
1 голос
/ 10 мая 2011
$('#historie .accordion_toggler .content').toggle();
for (i=0; i<3; i++) {
   $('#historie .accordion_toggler .content')[i].toggle();
   $('#historie .accordion_toggler .head')[i].toggleClass('active');
}

Используя этот код, я получаю эту ошибку: «Объект не поддерживает это свойство или метод.»

Моя цель - закрыть все элементы, но снова открыть первые три.

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 10 мая 2011

Причина, по которой вы получаете ошибку, состоит в том, что элементы в массиве не являются объектами jQuery, поэтому у них нет метода переключения.

$('#historie .accordion_toggler .content')[i].toggle();

Это должно работать:

$($('#historie .accordion_toggler .content')[i]).toggle();

но это короче:

$('#historie .accordion_toggler .content:lt(3)').toggle();
$('#historie .accordion_toggler .head:lt(3)').toggleClass('active');

Вероятно, есть более простой способ, даже если вы покажете нам полный пример.

0 голосов
/ 10 мая 2011

У вас есть только три элемента, или должны переключаться только первые три?

Вы можете сделать это:

$('#historie .accordion_toggler .content').each(function(){
   $('this').toggle().toggleClass('active');
});

Только для первых 3 вы можете сделать это

$('#historie .accordion_toggler .content').each(function(i){
   if(i < 3)
      $('this').toggle().toggleClass('active');
});
0 голосов
/ 10 мая 2011

Попробуйте вместо этого просто убедиться, что вы получаете только существующие элементы, и обновите элемент jQuery, а не собственный элемент DOM ( eq () ):

$('#historie .accordion_toggler .content').toggle();

var go_until = $('#historie .accordion_toggler .content').length;
if($('#historie .accordion_toggler .head').length < go_until){
   go_until = $('#historie .accordion_toggler .head').length;
}

for (var i = 0; i < go_until; i++) {
   // ANOTHER CHANGE HERE, that way you get the jQuery element 
   //  and not the DOM element:
   $('#historie .accordion_toggler .content').eq(i).toggle(); 
   $('#historie .accordion_toggler .head').eq(i).toggleClass('active');
}
0 голосов
/ 10 мая 2011

Я думаю, вы можете вызывать метод для самих элементов DOM. Попробуйте один лайнер, как это:

$('#historie .accordion_toggler .content').toggle().slice(0,3).toggle().toggleClass('active')
...