JavaScript / jQuery: проблема с объектом в IE

#javascript #jquery #toggle

#javascript #jquery #переключение

Вопрос:

 $('#historie .accordion_toggler .content').toggle();
for (i=0; i<3; i  ) {
   $('#historie .accordion_toggler .content')[i].toggle();
   $('#historie .accordion_toggler .head')[i].toggleClass('active');
}
  

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

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

Есть идеи?

Комментарии:

1. Можете ли вы опубликовать демо-версию на JS Fiddle , показывающую, что у вас есть на данный момент?

Ответ №1:

Причина, по которой вы получаете ошибку, заключается в том, что элементы в массиве не являются объектами 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');
  

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

Ответ №2:

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

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

Ответ №3:

Попробуйте это вместо этого, просто чтобы убедиться, что вы получаете только существующие элементы, и обновите элемент 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');
}
  

Ответ №4:

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

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

 $('#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');
});