const inputs = document.querySelectorAll('ol input');
const classes = [...new Set(Array.prototype.flatMap.call(
inputs,
n => [...n.classList]
))];
const classes = Array
.from(inputs, n => Array.from(n.classList))
.flat();
// или
const classes = [].concat.apply(
[],
[].map.call(inputs, n => n.className.split(' '))
);
// или
const classes = [];
for (const n of inputs) {
for (const m of n.classList) {
classes.push(m);
}
}
// или
const classes = [];
for (let i = 0; i < inputs.length; i++) {
for (let j = 0; j < inputs[i].classList.length; j++) {
classes[classes.length] = inputs[i].classList[j];
}
}
// или
const getClasses = (classList, i, n = classList.item(i)) =>
n ? [ n, ...getClasses(classList, -~i) ] : [];
const classes = (function get(i, n = inputs.item(i)) {
return n ? [ ...getClasses(n.classList, 0), ...get(++i) ] : [];
})(0);
class deferred {
constructor() {
this.promise = new Promise(resolve => this.resolve = resolve);
}
then(f) {
this.promise = this.promise.then(f);
}
}
class deferred {
constructor() {
this.callbacks = [];
}
then(f) {
this.callbacks.push(f);
}
resolve(val) {
this.callbacks.reduce((res, f) => f(res), val);
}
}
Не получается обратиться к элементу по его id.
const svgDocument = document.querySelector('object').contentDocument;
const element = svgDocument.querySelector('здесь указываете нужный id или что там вам надо');
textareaEl.addEventListener('paste', function() {
setTimeout(() => {
this.value = this.value.split('\n').map((n, i) => {
const line = i + 1;
return `${line}. ${n.replace(RegExp(`^${line}\\. `), '')}`;
}).join('\n');
});
});
Элемент - представленный в примере - это FileInput (кликать нужно на него, что бы вызвать диалог выбора файлов)
const imgs = document.querySelectorAll('img[src*="/test/"]');
это не в dom, а в строке
const div = document.createElement('div');
div.innerHTML = str;
const imgsStr = ''.concat(...[].map.call(
div.querySelectorAll('img[src*="/test/"]'),
n => n.outerHTML
));
const imgsStr = Array
.from(
new DOMParser().parseFromString(str, 'text/html').querySelectorAll('img[src*="/test/"]'),
n => n.outerHTML)
.join('');
const imgsStr = Array.prototype.reduce.call(
document.createRange().createContextualFragment(str).querySelectorAll('img[src*="/test/"]'),
(acc, n) => acc + n.outerHTML,
''
);
мне нужно удалить из этой строки все картинки, которые...
const div = document.createElement('div');
div.innerHTML = str;
const imgs = div.querySelectorAll('img[src*="/test/"]');
for (let i = 0; i < imgs.length; i++) {
imgs[i].outerHTML = '';
}
str = div.innerHTML;
const { body } = new DOMParser().parseFromString(str, 'text/html');
body.querySelectorAll('img[src*="/test/"]').forEach(n => n.remove());
str = body.innerHTML;
const fragment = document.createRange().createContextualFragment(str);
for (const n of fragment.querySelectorAll('img[src*="/test/"]')) {
n.parentNode.removeChild(n);
}
str = Array.from(fragment.childNodes, n => n.outerHTML || n.nodeValue).join('');
function onlyOne({ value, dataset: { group } }) {
document.querySelectorAll(`[data-group="${group}"]`).forEach(n => {
n.checked = n.checked && n.value === value;
});
}
todoList.forEach(function(element) {
document.getElementById('out').innerHTML += '<p>'+element+'</p>';
});
document.getElementById('out').innerHTML = todoList.map(n => `<p>${n}</p>`).join('');
const div = document.createElement('div');
div.innerHTML = html;
div.querySelectorAll('a[href*="/test/"]').forEach(n => n.outerHTML = '');
html = div.innerHTML;
const { body } = new DOMParser().parseFromString(html, 'text/html');
body.querySelectorAll('a[href*="/test/"]').forEach(n => n.remove());
html = body.innerHTML;
const fragment = document.createRange().createContextualFragment(html);
fragment.querySelectorAll('a[href*="/test/"]').forEach(n => n.parentNode.removeChild(n));
html = Array.from(fragment.childNodes, n => n.outerHTML || n.nodeValue).join('');
function sort(desc, attr) {
const select = document.querySelector('#search-sort-field');
select.append(...Array
.from(select.children, n => [ n, n.getAttribute(attr) * (desc ? 1 : -1) ])
.sort((a, b) => a[1] - b[1])
.map(n => n[0])
);
}
const tbody = document.querySelector('#table tbody');
// или
const [ tbody ] = document.getElementById('table').tBodies;
tbody.innerHTML = arr
.map(n => `
<tr>
<td><a href="${n.link}">${n.city}</a></td>
<td>${n.country}</td>
</tr>`)
.join('');
for (const n of arr) {
const tr = tbody.insertRow();
const a = document.createElement('a');
a.href = n.link;
a.text = n.city;
tr.insertCell().append(a);
tr.insertCell().textContent = n.country;
}
const dialog = new DOMParser().parseFromString(`
<div id="add-note__quick">
<i id="close">×</i>
<input type="text" class="field" placeholder="Событие">
<input type="text" class="field" placeholder="День, месяц, год">
<input type="text" class="field" placeholder="Участники">
<button>Создать</button>
</div>
`, 'text/html').body.querySelector('#add-note__quick');
dialog.querySelector('#close').addEventListener('click', () => {
dialog.parentNode.removeChild(dialog);
});
let selectedTd = null;
document.querySelector('#calendar-body').addEventListener('click', ({ target }) => {
if (target.tagName !== 'TH') {
return;
}
if (selectedTd) {
selectedTd.classList.remove('note');
}
if (selectedTd === target) {
target.removeChild(dialog);
selectedTd = null;
} else {
dialog.querySelectorAll('input').forEach(n => n.value = '');
target.appendChild(dialog);
target.classList.add('note');
selectedTd = target;
}
});
В консоле выдает Uncaught TypeError: next is not a function
Как выделить при помощи класса текущее число, не выходит
добавляю...
tbl.innerHTML = '';
перед циклом.currDay.getMonth() <= month
. Представьте, что следующий месяц - январь, год кончается. Что будет с вашим условием? Правильно, оно останется истинным. Навсегда. Лучше сделать так: проверяете равенство, без "меньше", а while заменяете на do-while - тогда числа предыдущего месяца, формально не подходящие под условие, всё равно будут обработаны, так как тело цикла выполняется до проверки условия.str.replace(/^\S+ /, '')
// или
str.match(/(?<= ).+/)[0]
// или
str.split(' ').slice(1).join(' ')
// или
str.slice(str.indexOf(' ') + 1)
const elements = document.querySelectorAll('.restab');
const baseId = 'responsivetable';
const setId = (el, index) => el.id = `${baseId}${-~index}`;
// или
const setId = (el, index) => el.setAttribute('id', baseId + ++index);
// или
const setId = (el, index) => {
const id = document.createAttribute('id');
id.value = baseId.concat(index + 1);
el.attributes.setNamedItem(id);
};
elements.forEach(setId);
// или
for (const [ i, n ] of elements.entries()) {
setId(n, i);
}
// или
for (let i = 0; i < elements.length; i++) {
setId(elements[i], i);
}
// или
(function next(i, n = elements.item(i)) {
n && (setId(n, i), next(-~i));
})(0);
Basket.totalPrice.call(data)
. Но, повторюсь, это безумие.