<div id="list">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div>
$('#list').on('click', '.item', function() {
const $items = $('#list .item').not(this);
// или
// const $items = $(this).siblings();
console.log($items.slice(0, 3).get().map(n => n.innerText).join(', '));
});
function createArr(size) {
const arr = [...Array(size)].map(() => Array(size).fill(0));
const mid = (size / 2) | 0;
arr.forEach((n, i) => {
n[i] = n[size - i - 1] = 1;
// если размер чётный, непонятно, где выставлять единицы, так что выставляем только для нечётных
if (size & 1) {
arr[mid][i] = n[mid] = 1;
}
});
// хотя, конечно, есть вариант ставить по два вертикальных и горизонтальных ряда единиц
/*
const mid = (size - 1) / 2;
arr.forEach((n, i) =>
n[i] =
arr[mid | 0][i] =
arr[Math.ceil(mid)][i] =
n[mid | 0] =
n[Math.ceil(mid)] =
n[size - i - 1] =
1);
*/
return arr;
}
console.log(createArr(21).map(n => n.join('')).join('\n'));
100000000010000000001
010000000010000000010
001000000010000000100
000100000010000001000
000010000010000010000
000001000010000100000
000000100010001000000
000000010010010000000
000000001010100000000
000000000111000000000
111111111111111111111
000000000111000000000
000000001010100000000
000000010010010000000
000000100010001000000
000001000010000100000
000010000010000010000
000100000010000001000
001000000010000000100
010000000010000000010
100000000010000000001
<button>click me</button>
button {
background: green;
}
@keyframes xxx {
0% { background-color: red; }
100% { background-color: transparent; }
}
.xxx {
animation: xxx 2s;
}
$('button').on({
click() {
$(this).addClass('xxx');
},
animationend() {
$(this).removeClass('xxx');
},
});
for (var i = 0; i < 10; i++) {
setTimeout(function() {
alert(+this);
}.bind(i), 100);
}
for (let i = 0; i < 10; i++) {
setTimeout(function() {
alert(i);
}, 100);
}
for (var i = 0; i < 10; i++) {
setTimeout(alert, 100, i);
}
for (var i = 0; i < 10; i++) {
setTimeout(new Function(`alert(${i})`), 100);
}
for (var i = 0; i < 10; i++) {
setTimeout(function() {
alert(i++);
}, 100);
}
i = 0;
$('body').on('click', function(e) {
var
$target = $(e.target),
isMark = $target.hasClass('mark'),
isActive = $target.hasClass('active');
if (!isMark || !isActive) {
$('.mark.active +.tooltip').fadeOut();
$('.mark.active').removeClass('active');
}
if (isMark && !isActive) {
$target.addClass('active');
$('.mark.active +.tooltip').fadeIn();
}
});
он не работает
<div data-num="2350" data-step="5" class="number">0</div>
$(window).scroll(function() {
var $win = $(window);
if ($('#counter').offset().top < $win.scrollTop() + 200) {
$win.off('scroll');
$('.number').addClass('viz').each(function() {
var
i = 0,
num = +this.dataset.num,
timeStep = 1000 / num,
valStep = +this.dataset.step || 1,
interval = setInterval(function($el) {
if ((i += valStep) >= num) {
clearInterval(interval);
}
$el.html(Math.min(i, num));
}, timeStep, $(this));
});
}
});
var steps = 100;
$(window).scroll(function() {
var $win = $(window);
if ($('#counter').offset().top < $win.scrollTop() + 200) {
$win.off('scroll');
$('.number').addClass('viz').each(function() {
var
i = 0,
num = +this.dataset.num,
valStep = num / steps,
interval = setInterval(function($el) {
if ((i += valStep) >= num) {
clearInterval(interval);
}
$el.html(Math.floor(Math.min(i, num)));
}, 20, $(this));
});
}
});
querySelectorAll
возвращает коллекцию элементов, никакого addEventListener
у неё нет - его надо вызывать отдельно у каждого элемента.e.classList
? e
- это объект события, а не элемент DOM-дерева.const elems = document.querySelectorAll('nav#menu_3 > ul > li');
elems.forEach(n => n.addEventListener('mouseover', onMouseover));
function onMouseover() {
elems.forEach(n => {
n.classList.toggle('zoomed', this === n);
n.classList.toggle('nozoomed', this !== n);
});
}
<a href="#" class="menu-trigger" data-list="#menu">Menu</a>
<a href="#" class="menu-trigger" data-list="#contacts">Contacts</a>
<ul id="menu" class="list">...</ul>
<ul id="contacts" class="list">...</ul>
$('.menu-trigger').click(function() {
var list = this.dataset.list;
$(this).parent().find('.list').not(list).slideUp(0);
$(list).slideToggle(500);
});
$(window).resize(function() {
if ($(window).width() > 500) {
$('.list').removeAttr('style');
}
});
$('селектор кнопки').click(function() {
$('селектор-элементов')
.not('.класс')
.slice(0, количествоЭлементовКоторымНадоДобавитьКласс)
.addClass('класс');
});
const items = [...document.querySelectorAll('селектор элементов')];
document.querySelector('селектор кнопки').addEventListener('click', () => {
items
.splice(0, количествоЭлементовКоторымНадоДобавитьКласс)
.forEach(n => n.classList.add('класс'));
});
пытался получить так:
console.log($('.wall_post_text', this)).innerText;
Но пишет undefined
.innerText
надо внутри внешних скобок было разместить, а так вы у результата вызова console.log
хотите свойство прочитать (и получаете вы никакой не undefined
, а ошибку "cannot read properties of undefined").innerText
надо получать у DOM-элемента, а не jquery объекта. Ну или замените обращение к свойству на вызов метода.$('.wall_post_text', this)[0].innerText
// или
$('.wall_post_text', this).get(0).innerText
// или
$('.wall_post_text', this).prop('innerText')
// или
$('.wall_post_text', this).eq(0).text()
// или
$('.wall_post_text:eq(0)', this).text()
// или, если элемент .wall_post_text внутри this один
$('.wall_post_text', this).text()
return json_encode($result)
наверное должно быть что-то вроде echo json_encode($result)
. Также непонятно, почему никак не обрабатывается ситуация, когда name и email отсутствуют.header('Content-Type: application/json');
. Всё-таки json возвращаете.?>
тоже не помешает - чтобы случайно не добавлять пробелы/пустые строки в ответ.dataType: "html"
было бы неплохо заменить на dataType: "json"
- по получении ответа не придётся вызывать parseJSON, response будет объектом.