jQuery('#carousel_android').flexslider({...}); // неправильно
jQuery('.flexslider').flexslider({...}); // правильно
function builtInReverse(string) {
return string.split('').reverse().join('');
}
function forLoopReverse(string) {
let newString = '';
for (let i = string.length - 1; i >= 0; i--) {
newString += string[i];
}
return newString
}
function recursionReverse(string) {
return string === '' ? string : recursionReverse(string.substr(1)) + string.charAt(0);
}
function reverseString(string, handler) {
return handler(string);
}
console.log( reverseString('test', builtInReverse) ); // 'tset'
console.log( reverseString('test', forLoopReverse) ); // 'tset'
console.log( reverseString('test', recursionReverse) ); // 'tset'
const someSrt = "954 432 534 test abc test test test abc test test abc ";
const words = someSrt.match(/([a-zA-Z]+)/g);
const numbers = someSrt.match(/(\d+)/g);
console.log(words); // ["test", "abc", "test", "test", "test", "abc", "test", "test", "abc"]
console.log(numbers); // ["954", "432", "534"]
const HTMLstring = `
<div>
<div class="wanted"></div>
<div>
<div class="wanted"></div>
</div>
</div>
<div class="wanted"></div>
<div>
<div></div>
<div></div>
<div class="wanted"></div>
</div>`;
$('.wanted', $.parseHTML(`<root>${HTMLstring}</root>`)); // jQuery collection
<table class="table-1">
<tr class="row-1">
<td><span class="name">Test</span></td>
<td><button>Get</button></td>
</tr>
<tr class="row-999">
<td><span class="name">Test 999</span></td>
<td><button>Get</button></td>
</tr>
<table>
$('.table-1').on('click', 'button', e => {
const text = $(e.target).closest('tr').find('span.name').text();
console.log(text);
});
var SomeObject = function() {
this.prop = 'any';
this.filters = Object.assign({}, this.constructor.filters);
}
SomeObject.filters = SomeObject.prototype.filters = {};
SomeObject.addFilter = SomeObject.prototype.addFilter = function(n){
this.filters[n] = function(){
console.log(n);
}
};
SomeObject.addFilter('a');
SomeObject.addFilter('b');
var Instance1 = new SomeObject();
var Instance2 = new SomeObject();
Instance1.addFilter('c');
console.log(Instance1.filters.a()); // 'a'
console.log(Instance2.filters.a()); // 'a'
console.log(Instance1.filters.b()); // 'b'
console.log(Instance2.filters.b()); // 'b'
console.log(Instance1.filters.c()); // 'c'
console.log(Instance2.filters.c()); // TypeError: Instance2.filters.c is not a function
const ex = "My favourite game";
function wordReverse(str) {
var newStr = '',
strLength = str.length;
for (var i = 0; i < strLength; i++) {
newStr += str[strLength - 1 - i];
}
return newStr;
}
function wordsReverse(str) {
str += " ";
var wordsReverseArray = [],
wordStr = "";
for(var i=0; i<str.length; i++) {
if(str[i] !== " ") {
wordStr += str[i];
} else {
wordsReverseArray.push(wordReverse(wordStr));
wordStr = "";
}
}
return wordsReverseArray.join(' ');
}
console.log(wordsReverse(ex)); // "yM etiruovaf emag"
<span>Testimonials</span>
span {
background-image: linear-gradient(to right, red, red), linear-gradient(to left, red, red);
background-size: 0 2px;
background-position: bottom left, bottom right;
background-repeat: no-repeat;
transition: background-size .2s ease-in-out;
}
span:hover {
background-size: calc(50% - 2px) 2px;
}
.dropdown {
transition: all .3s ease;
}
dropdown
два состояния:.dropdown {
opacity: 0;
visibility: hidden;
transform: translateY(30px);
}
dropdown
видим: opacity: 1;
visibility: visible;
transform: translateY(0px);
mouseover
, на него вешается класс focus
, который инициирует переход А --> Б:menuitem.mouseover(function(){
this.addClass('focus');
});
.menuitem.focus > .dropdown {
opacity: 1;
visibility: visible;
transform: translateY(0px);
}
mouseout
, этот класс удаляется, причем не сразу, а с задержкой в 300мс, после чего инициируется переход Б --> А:menuitem.mouseout(function(){
id = setTimeout(function(){
this.removeClass(focus);
}, 300);
});
dropdown
предыдущего пункта еще не спрятался (т.к. еще не истекла задеркжка в 300мс), происходит форсированное убирание класса focus
с предыдущего пункта меню, в этом случае п. 3 можно переписать следующим образом:function forceRemoveClass() {
window.clearInterval(id);
prevMenuitem.removeClass('focus');
}
...
menuitem.mouseover(function(){
forceRemoveClass();
this.addClass('focus');
});
let json = [
{"location": {
"country": {
"name": "Finland"
},
"city":"Helsinki"
}},
{"location": {
"country": {
"name": "Russia",
},
"city":"Moscow"
}},
{"location": {
"country": {
"name": "Russia",
},
"city":"Novgorod"
}},
{"location": {
"country": {
"name": "USA",
},
"city":"Boston"
}},
{"location": {
"country": {
"name": "Russia",
},
"city":"Ufa"
}},
{"location": {
"country": {
"name": "Australia",
},
"city":"Sidney"
}}
];
let wow = {
db: {},
parse(data) {
data.forEach(function({location: {country: {name: country}, city}} = node){
!this.db[country] ? (this.db[country] = {}, this.db[country][city] = true) : this.db[country][city] = true;
}, this);
return this;
},
render() {
function renderList(data) {
return `<ul>${renderCountries(data)}</ul>`
}
function renderCountries(data, html = '') {
Object.keys(data).forEach(country => html += `<li>${country}<ul>${renderCities(data[country])}</ul></li>`);
return html;
}
function renderCities(data, html = '') {
Object.keys(data).forEach(city => html += `<li>${city}</li>`);
return html;
}
return `<ul>${renderList(this.db)}</ul>`;
}
};
document.querySelector('body').innerHTML = wow.parse(json).render();