Функции, объявленные через Function Declaration, отличаются от Function Expression тем, что интерпретатор создаёт их при входе в область видимости (в начале выполнения скрипта), так что они работают до объявления.
<ul id="list">
<li class="yes">1</li>
<li class="no">2</li>
<li class="no">3</li>
<li>...</li>
<li class="yes">100</li>
</ul>
function on(elSelector, eventName, selector, fn) {
var element = document.querySelector(elSelector);
element.addEventListener(eventName, function(event) {
var possibleTargets = element.querySelectorAll(selector);
var target = event.target;
for (var i = 0, l = possibleTargets.length; i < l; i++) {
var el = target;
var p = possibleTargets[i];
while(el && el !== element) {
if (el === p) {
return fn.call(p, event);
}
el = el.parentNode;
}
}
});
}
on('#list', 'click', '.yes', function(e) {
// this function is only called, when a list item with 'yes' class is called
console.log(e.target); // this is the clicked list item
});
В чем проблема?В том, что jQuery.data() не обновляет значение атрибута ноды. Если вам нужно, чтобы значение обновлялось, используйте
.attr('data-active', selectedId)
.Алгоритм синтаксического анализа
Как уже говорилось в предыдущих разделах, синтаксический анализ кода HTML невозможно выполнить с помощью стандартных нисходящих или восходящих анализаторов.
Ниже перечислены причины этого.
- Язык имеет "щадящий" характер.
- В браузерах заложены механизмы обработки некоторых частых ошибок в коде HTML.
- Цикл синтаксического анализа характеризуется возможностью повторного вхождения. Исходный документ обычно не меняется в процессе анализа, однако в случае HTML теги скрипта, содержащие document.write, могут добавлять новые токены, поэтому исходный код может меняться.
- Так как стандартные анализаторы не подходят для HTML, браузеры создают собственные анализаторы.
Алгоритм синтаксического анализа подробно описан в спецификации HTML5.
var handler = function(){
$("ul.tabs li").removeClass("active");
$(this).addClass("active");
$(".tab_content, .tab_test").hide();
var activeTab = $(this).find("a").attr("class");
$('.'+activeTab).show();
}
$("ul.tabs li").interval = setInterval(handler.bind(this), 1000);
Подскажите для чего нужна выделенная строка или вообще не нужна в данном коде?Поскольку в js нет нативных неймспейсов, используется именно такой способ их "эмуляции". Но учитывая, что потом объявляется одноименная функция, внутри которой ещё и прототип переопределяется, приведённый код - полная хрень.
var app = app || {};
app.myModule = (function () {
connect: function(){}
})()
function rotateBackground() {
var ct = $("#header").data("background") || 0,
newCt = ct == background.length -1 ? 0 : ct + 1;
$("#header").data("background", newCt).fadeIn()
.css({'background' : 'url('+ background[newCt] +') no-repeat', 'background-size':'cover'}).delay(2000).fadeOut(200, rotateBackground);
}
var obj = {
div: $('div'),
onClick: function () {
counter++;
this.div.text(counter);
},
init: function() {
$('div:nth-child(2)').click(this.onClick.bind(this));
}
};
Почему не работает :last-child селектор?https://jsfiddle.net/5jrpsxnd/1/
В программу я загружаю список прокси, список аккаунтов ВКонтакте. При нажатии кнопки “Старт” программа в многопоточном режиме начинает выполнять задания на сайте ***.
Возможно ли в ВЕБе реализовать данный функционал? И на каком ЯП сделать это проще?