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