Справочное руководство
Краткий справочник по часто используемым методам JavaScript и API-интерфейсам браузера.
Если не указано иное, они работают во всех современных браузерах и IE9 +. И могут быть расширены с помощью полифилов.
Оглавление
- Селекторы(Selectors)
- Циклы(Loops)
- Классы(Classes)
- Стили(Styles)
- Атрибуты(Attributes)
- Слушатели событий(Event Listeners)
- Строки(Strings)
- Массивы(Arrays)
- Объекты(Objects)
- HTML и текст(HTML & Text)
- DOM Инъекция(DOM Injection)
- Обход DOM(Traversing the DOM)
- Окно просмотра(The Viewport)
- Расстояния(Distances)
- Хранение браузера(Browser Storage)
- JSON\
- Ajax и API
Селекторы(Selectors)
querySelectorAll()
Найти все совпадающие элементы на странице.
Можно использовать любой допустимый селектор CSS.
// Получить все элементы с классом "bg-red"
var elemsRed = document.querySelectorAll('.bg-red');
// Получить все элементы с атрибутом "[data-sale]"
var elemsSnacks = document.querySelectorAll('[data-sale]');
querySelector()
Найти первый соответствующий элемент на странице.
// Первый div
var elem = document.querySelector('div');
// Первый div с классом .bg-red
var elemRed = document.querySelector('.bg-red');
// Первый div с атрибутом data-sale с значением "appartment"
var elemCarrots = document.querySelector('[data-sale="appartment"]');
// Элемент, который не существует
var elemNone = document.querySelector('.bg-orange');
matches()
Метод .matches()
вернёт true
или false
, в зависимости от того, соответствует ли элемент указанному css-селектору.
var elem = document.querySelector('#apartment');
if (elem.matches('.swimpool')) {
console.log('It matches!');
} else {
console.log('Not a match... =(');
}
Циклы(Loops)
for
цикл
Циклически перебирайте массивы и NodeList
списки, похожие на массивы (например ).
var apartment = [
'saloon',
'kitchen',
'bath',
'bedroom'
];
for (var i = 0; i < apartment.length; i++) {
console.log(i) // index
console.log(apartment[i]) // value
}
// returns 0, saloon, 1, kitchen, 2, bath, 3, bedroom
for ... in
цикл
Похож на for
цикл, но используется для циклического прохождения объектов.
var apartment = {
'saloon': 'rest',
'kitchen': 'eat',
'bath': 'washing',
'bedroom': 'sleep'
};
var arr = []
for (var key in apartment ) {
if (apartment.hasOwnProperty(key)) {
arr.push(key + ' for ' + apartment[key])
}
}
console.log(arr.join(", ")); // value
// return saloon for rest, kitchen for eat, bath for washing, bedroom for sleep
Array.forEach()
var apartment = [
'saloon',
'kitchen',
'bath',
'bedroom'
];
apartment.forEach(function (sandwich, index) {
console.log(index) // index
console.log(sandwich) // value
});
// return 0, saloon, 1, kitchen, 2, bath, 3, bedroom
Классы(Classes)
classList
Добавить, удалить, переключать и проверять наличие класса.
var elem = document.querySelector('#apartment');
// Добавляем указанное имя класса
elem.classList.add('swimpool');
// Удаляем указанное имя класса
elem.classList.remove('swimpool');
// Переключаем указанное имя класса
// (Добавляет класс, если его еще нет в элементе, удаляет его, если он есть.)
elem.classList.toggle('rent');
// Проверяет, есть ли у элемента определенный класс
if (elem.classList.contains('flat')) {
console.log('add flat!');
}
className
Получить все классы элемента в виде строки, добавить класс или классы или полностью заменить или удалить все классы.
var elem = document.querySelector('div');
// Получить все классы элемента
var elemClasses = elem.className;
// Добавить класс к элементу
elem.className += ' vanilla-js';
// Полностью заменить все классы на элементе
elem.className = 'new-class';
Стили(Styles)
Inline Styles
Получить и установить встроенные стили для элемента.
// Получить стиль
// Если этот стиль не задан как встроенный стиль непосредственно на элементе, он возвращает пустую строку
// например. <div id="apartment" style="background-color: gold;">apartment</div>
document.getElementById('apartment').style.backgroundColor; // return "gold"
document.getElementById('apartment').style.fontWeight; // return ""
// Установить стиль
document.getElementById('apartment').style.backgroundColor = 'purple';
Computed Styles
Получить фактический вычисленный стиль элемента. Это учитывается в таблицах стилей по умолчанию в браузере, а также в указанных вами внешних стилях.
// Получить фон html
window.getComputedStyle(document.documentElement).backgroundColor // return "rgb(255, 255, 255)"
// Получить фон some-elem
window.getComputedStyle(some-elem).backgroundColor;
Атрибуты(Attributes)
Получить, установить, удалить и проверить наличие атрибутов (включая атрибуты данных) для элемента. Эти методы также могут быть использованы для манипулирования других типов атрибутов-вещи , как id
, tabindex
, name
и так далее.
var elem = document.querySelector('#apartment');
// Установить значение атрибута
elem.setAttribute('data-apartment', 'rent');
// Получить значение атрибута
var apartment = elem.getAttribute('data-apartment');
// Удалить атрибут
elem.removeAttribute('data-apartment');
// Проверить есть ли указанный атрибут у элемента
if (elem.hasAttribute('data-info')) {
console.log('Add a info!');
}
Слушатели событий(Event Listeners)
Слушайте события на элементе. Вы можете найти полный список доступных событий в Mozilla Developer Network.
var btn = document.querySelector('#click-me');
btn.addEventListener('click', function (event) {
console.log(event); // The event details
console.log(event.target); // The clicked element
}, false);
Строки(Strings)
String.indexOf()
Определяем, содержит ли строка подстроку. Он возвращает индекс, где подстрока начинается в строке, или -1 если подстрока не найдена. Регистр учитывается .
var str = 'I love Cape Cod potato chips.';
// Returns 7
str.indexOf('Cape Cod');
// Returns 7
str.indexOf('Cape C');
// Returns -1
str.indexOf('cape cod');
Если вам просто нужен логический true / false тест, вы можете сделать так:
if (str.indexOf('Cape Cod') > -1) {
console.log('It contains the string');
}
replace()
Заменит часть текста в строке чем-то другим.
var text = 'I love Cape Cod potato chips!';
var lays = text.replace('Cape Cod', 'Lays');
var soda = text.replace('Cape Cod potato chips', 'soda');
var extend = text.replace('Cape Cod', 'Cape Cod salt and vinegar');
// lays: 'I love Lays potato chips!'
// soda: 'I love soda!'
// extend: 'I love Cape Cod salt and vinegar potato chips!'
По умолчанию replace() метод заменяет первое совпадение. Чтобы заменить все совпадения, вам нужно передать регулярное выражение с глобальным флагом ( g).
toLowerCase()
Преобразует весь текст в строку в нижний регистр.
var text = 'This sentence has some MIXED CASE LeTTeRs in it.';
var lower = text.toLowerCase();
// returns 'this sentence has some mixed case letters in it.'
toUpperCase()
Преобразует весь текст в строку в верхний регистр.
var text = 'This sentence has some MIXED CASE LeTTeRs in it.';
var upper = text.toUpperCase();
// returns 'THIS SENTENCE HAS SOME MIXED CASE LETTERS IN IT.'
parseInt()
Преобразуем строку в целое число (целое число). Второй аргумент, 10 называется radix. Это базовое число, используемое в математических системах. Для нашего использования так должно быть всегда 10.
// returns 42
parseInt('42', 10);
// also returns 42
parseInt('42px', 10);
parseFloat()
Преобразовать строку в число точек (число с десятичными точками).
// returns 3.14
parseFloat('3.14');
// also returns 3.14
parseFloat('3.14someRandomStuff');
// returns 3
console.log(parseFloat('3'));
Number()
Преобразует строку в число.
Иногда возвращает целое число. В других случаях он возвращает плавающее значение. И если вы передадите строку со случайным текстом, вы получите NaN
аббревиатуру «Не число».
// returns 123
Number('123');
// returns 12.3
Number('12.3');
// returns NaN
Number('3.14someRandomStuff');
slice()
Получить часть строки, начинающуюся (и, возможно, заканчивающуюся) с определенного символа.
Первый аргумент - с чего начать. Используйте 0для включения первого символа. Второй аргумент - это конец (и необязательный). Если какой-либо аргумент является отрицательным целым числом, он начинается с конца строки и работает в обратном направлении.
var text = 'Cape Cod potato chips';
var startAtFive = text.slice(5);
var startAndEnd = text.slice(5, 8);
var sliceFromTheEnd = text.slice(0, -6);
// startAtFive: 'Cod potato chips'
// startAndEnd: 'Cod'
// sliceFromTheEnd: 'Cape Cod potato'
split()
Преобразует строку в массив, разделив ее после определенного символа (или символов).
Первый аргумент delimiter
, символ или символы для разделения. В качестве необязательного второго аргумента вы можете прекратить разбивать строку после того, как будет найдено определенное количество совпадений.
var shoppingList = 'Table, sofa, lamp, TV';
var menu = shoppingList.split(', ');
var limitedMenu = shoppingList.split(', ', 2);
// menu: ["Table", "sofa", "lamp", "TV"]
// limitedMenu: ["Table", "sofa"]
Combing Strings (Объединение строк)
Вы можете использовать конкатенацию строк для объединения двух или более строк вместе. Объединим строки, используя оператор сложения ( +).
/**
* Строки как переменные
*/
var str1 = 'I love study JavaScript language.';
var str2 = 'What about you?';
var concat = str1 + ' ' + str2;
// Logs "I love study JavaScript language. What about you?"
console.log(concat);
/**
* Создание новой переменной из двух строк
*/
var concat2 = 'I love study JavaScript language. ' + 'What about you?';
// Logs "I love study JavaScript language. What about you?"
console.log(concat2);
Template Literals(Шаблонные литералы)
Представленные в ES6, литералы шаблонов дают более простой способ создания многострочных строк.
Запишите литерал шаблона с помощью backtick ( `) в начале и конце. Вы можете использовать переменные-заполнители (часто называемые выражениями ), заключив имя переменной в фигурные скобки с начальным знаком доллара ( ${VARIABLE_NAME}
).
// Базовый шаблонный литерал
var concat =
`I love study JavaScript language.
What about you?`;
console.log(concat);
// Шаблонный литерал с переменными-заполнителями
var brand = 'JavaScript';
var person = 'you';
var concat2 =
`I love study ${brand} language.
What about ${person}?`;
console.log(concat2);
Массивы(Arrays)
push()
Добавить элементы в массив.
var apartment = ['saloon', 'kitchen', 'bath'];
apartment.push('bedroom', 'bath');
// apartment: ['saloon', 'kitchen', 'bath', 'bedroom', 'bath']
Array.concat()
Объединить два или более массивов вместе. Возвращает новый массив.
var apartment1 = ['saloon', 'kitchen', 'bath'];
var apartment2 = ['bedroom', 'hall'];
var allApartment = apartment1.concat(apartment2);
// apartment1: ['saloon', 'kitchen', 'bath']
// apartment2: ['bedroom', 'hall']
// allApartment: ['saloon', 'kitchen', 'bath', 'bedroom', 'hall']
Array.slice()
Скопирует элементы в новый массив.
Первый аргумент - это индекс массива, с которого нужно начинать, а второй - индекс, на котором заканчивается. Оба являются необязательными. Если вы опустите стартовый индекс, он начнется в начале. Если вы опустите индекс конца, он будет идти до конца.
var apartment = ['saloon', 'kitchen', 'bath', 'bedroom'];
// ['bath', 'bedroom']
var fewerSandwiches = sandwiches.slice(2);
// ['kitchen', 'bath', 'bedroom']
var fewerSandwiches2 = sandwiches.slice(1, 3);
// Clone an array
var sandwichesCopy = sandwiches.slice();
Array.from()
Создайте новый массив из массива или подобного массиву объекта (такого как NodeList
).
var apartment = Array.from(document.querySelectorAll('.apartment'));
Array.filter()
Создайте новый массив только с элементами, которые проходят тест, который вы включаете в качестве функции обратного вызова. Обратный вызов принимает три аргумента: текущий элемент в значении цикла, его индекс и сам массив.
// Create a new array with only numbers greater than 10
var newArray = [1, 2, 7, 42, 99, 101].filter(function (item) {
return item > 10;
});
// Logs [42, 99, 101]
console.log(newArray);
Array.map()
Перебирайте каждый элемент массива, трансформируйте его и возвращайте новый массив. Обратный вызов принимает три аргумента: текущий элемент в значении цикла, его индекс и сам массив.
/**
* Double each number in an array
*/
var numbers = [1, 4, 9];
var doubles = numbers.map(function(num) {
return num * 2;
});
// Logs [2, 8, 18]
console.log(doubles);
/**
* Get an array of just names
*/
var data = [
{
name: 'Kyle',
occupation: 'Fashion Designer'
},
{
name: 'Liza',
occupation: 'Web Developer'
},
{
name: 'Emily',
occupation: 'Web Designer'
},
{
name: 'Melissa',
occupation: 'Fashion Designer'
},
{
name: 'Tom',
occupation: 'Web Developer'
}
];
var names = data.map(function (item) {
return item.name;
});
// Logs ["Kyle", "Liza", "Emily", "Melissa", "Tom"]
console.log(names);
Array.find()
Array.find()
Метод возвращает первый элемент массива , который удовлетворяет условия, заданные в функции обратного вызова. Если совпадений не найдено, возвращается undefined
.
/**
* Get the first item greater than 10
*/
// Returns 12
var greaterThanTen = [1, 12, 25, 42, 99, 101].find(function (item) {
return item > 10;
});
// Returns undefined
var greaterThanTen = [1, 2, 4, 7, 8].find(function (item) {
return item > 10;
});
Обратный вызов принимает аргумент для представления текущего элемента в цикле массива.
Array.reverse()
Обратный порядок элементов в массиве.
var count = [1, 2, 3, 4, 5];
// Reverse the array order
count.reverse();
// Logs [5, 4, 3, 2, 1]
console.log(count);
Array.join()
Объедините все элементы в массиве в строку, разделенную разделителем, который вы можете передать в качестве аргумента. По умолчанию он использует запятую ( ,)
в качестве разделителя, если он не указан.
var strings = [
'I love Cape Cod potato chips.',
'What about you?'
];
var concat = strings.join();
var concatWithSpace = strings.join(' ');
var concatWithSmiley = strings.join(' =) ');
// Logs "I love Cape Cod potato chips.,What about you?"
console.log(concat);
// Logs "I love Cape Cod potato chips. What about you?"
console.log(concatWithSpace);
// Logs "I love Cape Cod potato chips. =) What about you?"
console.log(concatWithSmiley);
Объекты(Objects)
Object.assign()
Выполнит поверхностное объединение двух или более объектов. Передайте каждый объект для объединения в качестве аргумента.
Примечание: при мелком слиянии вложенные объекты полностью перезаписываются, а не объединяются вместе.
// Example objects
var object1 = {
apple: 0,
banana: {
weight: 52,
price: 100
},
cherry: 97
};
var object2 = {
banana: {
price: 200
},
durian: 100
};
var object3 = {
apple: 'yum',
pie: 3.214,
applePie: true
};
// В этом примере "banana" будет содержать только {price: 200}
// В глубоком слиянии он будет содержать {price: 200, weight: 52}
var mergedObjs = Object.assign(object1, object2, object3);
Deep Merges
// Example objects
var object1 = {
apple: 0,
banana: {
weight: 52,
price: 100
},
cherry: 97
};
var object2 = {
banana: {
price: 200
},
durian: 100
};
var object3 = {
apple: 'yum',
pie: 3.214,
applePie: true
};
// Создайте новый объект, комбинируя два или более объектов
var mergedShallow = extend(object1, object2, object3);
var mergedDeep = extend(true, object1, object2, object3);
var clonedObj = extend(object1);
Для поддержки глубоких слияний можно использовать вспомогательный метод ниже.
/*!
* Merge two or more objects together.
* (c) 2017 Chris Ferdinandi, MIT License, https://gomakethings.com
* @param {Boolean} deep If true, do a deep (or recursive) merge [optional]
* @param {Object} objects The objects to merge together
* @returns {Object} Merged values of defaults and options
*/
var extend = function () {
// Variables
var extended = {};
var deep = false;
var i = 0;
// Check if a deep merge
if ( Object.prototype.toString.call( arguments[0] ) === '[object Boolean]' ) {
deep = arguments[0];
i++;
}
// Merge the object into the extended object
var merge = function (obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
// If property is an object, merge properties
if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {
extended[prop] = extend(extended[prop], obj[prop]);
} else {
extended[prop] = obj[prop];
}
}
}
};
// Loop through each object and conduct a merge
for (; i < arguments.length; i++) {
merge(arguments[i]);
}
return extended;
};
Удалить элемент из объекта
Используйте delete оператор, чтобы удалить элемент из объекта.
var lunch = {
sandwich: 'turkey',
chips: 'cape cod',
drink: 'soda'
};
// Remove the chips key from the lunch object
delete lunch.chips;
// Logs {sandwich: 'turkey', drink: 'soda'}
console.log(lunch);
Object.keys()
Вернет массив ключей от объекта. Передайте объект в качестве аргумента.
var lunch = {
sandwich: 'turkey',
chips: 'cape cod',
drink: 'soda'
};
// Logs ['sandwich', 'chips', 'drink']
console.log(Object.keys(lunch));
// Logs "sandwich", "turkey", "chips", "cape cod", "drink", "soda"
Object.keys(lunch).forEach(function (key) {
console.log(key); // The key
console.log(lunch[key]); // The value
});
HTML и текст(HTML & Text)
innerHTML
Получит и установит HTML-контент для элемента.
Примечание. Использование innerHTML** стороннего или пользовательского контента может подвергнуть вас атакам межсайтового скриптинга (XSS)._
var elem = document.querySelector('#some-elem');
// Get HTML content
var html = elem.innerHTML;
// Set HTML content
elem.innerHTML = 'We can dynamically change the HTML. We can even include HTML elements like <a href="#">this link</a>.';
// Add HTML to the end of an element's existing content
elem.innerHTML += ' Add this after what is already there.';
// Add HTML to the beginning of an element's existing content
elem.innerHTML = 'We can add this to the beginning. ' + elem.innerHTML;
// You can inject entire elements into other ones, too
elem.innerHTML += '<p>A new paragraph</p>';
textContent
Получит текст элемента без его разметки.
var elem = document.querySelector('#some-elem');
// Get text content
var text = elem.textContent;
// Set text content
elem.textContent = 'We can dynamically change the content.';
// Add text to the end of an element's existing content
elem.textContent += ' Add this after what is already there.';
// Add text to the beginning of an element's existing content
elem.textContent = 'We can add this to the beginning. ' + elem.textContent;
DOM Инъекция(DOM Injection)
createElement()
insertBefore()
before()
after()
prepend()
append()
appendChild()
Вставляет элемент в конце набора элементов внутри общего родителя. Вызовите appendChild() метод на ссылочном узле и передайте новый узел в качестве аргумента.
// Create a new element
var newNode = document.createElement('div');
// Get the reference node
var referenceNode = document.querySelector('#some-element');
// Insert the new node after the last element in the parent node
referenceNode.appendChild(newNode);
Работает как минимум до IE6.
removeChild()
Удалить элемент из DOM. Этот метод вызывается для родителя целевого элемента, который вы можете получить parentNode.
var elem = document.querySelector('#some-element');
elem.parentNode.removeChild(elem);
Работает как минимум до IE6.
remove()
Удаляет элемент из DOM. Вызовите remove() метод для элемента, который вы хотите удалить.
var elem = document.querySelector('#some-element');
elem.remove();
Работает во всех современных браузерах, включая Edge, но не IE. Используйте с полифилом.
Обход DOM(Traversing the DOM)
Окно просмотра(The Viewport)
Расстояния(Distances)
Хранение браузера(Browser Storage)
JSON
JSON.stringify()
Преобразует объекты и массивы в строки.
// A lunch order
var lunch = {
sandwich: 'turkey',
chips: 'Cape Cod',
drink: 'Pepsi'
};
// Save data to local storage
localStorage.setItem('lunchOrder', JSON.stringify(lunch));
// Drink options
var drinks = ['Pepsi', 'water', 'lemonade'];
// Save data to local storage
localStorage.setItem('drinkOptions', JSON.stringify(drinks));
JSON.parse()
Преобразует строковый JSON обратно в объект или массив.
// Get data from local storage
var savedLunch = JSON.parse(localStorage.getItem('lunchOrder'));
var savedDrinks = JSON.parse(localStorage.getItem('drinkOptions'));
Ajax и API
XMLHttpRequest() (XHR)
XHR-запросы состоят из трех этапов:
- Настройка нашего запроса, создав новый XMLHttpRequest().
- Создайте
onreadystatechange
обратный вызов для запуска при изменении состояния запроса. - Откройте и отправьте наш запрос.
// Set up our HTTP request
var xhr = new XMLHttpRequest();
// Setup our listener to process request state changes
xhr.onreadystatechange = function () {
// Only run if the request is complete
if (xhr.readyState !== 4) return;
// Process our return data
if (xhr.status >= 200 && xhr.status < 300) {
// This will run when the request is successful
// It checks to make sure the status code is in the 200 range
console.log('success!', xhr);
} else {
// This will run when it's not
console.log('The request failed!');
}
// This will run either way
// All three of these are optional, depending on what you're trying to do
console.log('This always runs...');
};
// Create and send a GET request
// The first argument is the post type (GET, POST, PUT, DELETE, etc.)
// The second argument is the endpoint URL
xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts');
xhr.send();