Показать сообщение отдельно
  #8 (permalink)  
Старый 27.12.2018, 22:05
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от garrip91
2. А КАК БЫ ВЫ НА МОЁМ МЕСТЕ ЭТО СДЕЛАЛИ?
Уже из самого названия вашего проекта известно, что подходящим элементом будет <table>. Размер таблицы умножения может быть разным. Например, вас могут интересовать произведения чисел от 2 до 9 на 5. Также вас может интересовать конкретно какой-то особенный кусочек таблицы умножения. Например, произведения от 3×7 до 5×9 тоже составляют таблицу умножения. Или все произведения двухзначных чисел от 10 до 20 (получается таблица умножения от 10×10 до 20×20). Такие параметры таблицы умножения можно указать через собственный атрибут data-multiplication-range, например, в формате JSON. Для того, что бы описать простую таблицу умножения, достаточно 4 числа — первые два указывают на произведение этих чисел в левом верхнем углу таблицы, а оставшиеся два — на произведение этих чисел в правом нижнем углу таблицы. Т. е. чтобы отобразить в вашем приложении таблицу умножения, достаточно следующего кода HTML.

<table data-multiplication-range="[1,3, 10,9]"></table>


Теперь достаточно дописать скрипт, который превращал бы данную таблицу в полноценную таблицу умножения. Также я добавил стили, но они играют чисто косметичекую роль.

<!DOCTYPE html>
<html lang="ru">
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Таблица умножения</title>
	<style>
		
[data-multiplication-range],
[data-multiplication-range] tbody,
[data-multiplication-range] tr,
[data-multiplication-range] td
{
	display: block;
}

[data-multiplication-range] {
	margin: 1em;
}

[data-multiplication-range] tbody {
	display: flex;
	flex-wrap: wrap;
}

[data-multiplication-range] tr {
	margin-bottom: .3em;
}

[data-multiplication-range] td {
	--border-width: 1px;
	border: var(--border-width) solid #aaa;
	margin-top: calc(-1 * var(--border-width));
	margin-left: calc(-1 * var(--border-width));
	padding: .25em .5em;
	white-space: nowrap;
}

[data-multiplication-range] td:nth-child(odd) {
	background: rgba(0, 0, 0, 0.1);
}
	
	</style>
</head>
<body>
	<table data-multiplication-range="[2,5, 9,5]"></table>
	<table data-multiplication-range="[5,2, 5,9]"></table>
	<table data-multiplication-range="[3,7, 5,9]"></table>
	<table data-multiplication-range="[1,3, 10,9]"></table>
	<table data-multiplication-range="[10,10, 20,20]"></table>
	<script>
		
for(const table of document.querySelectorAll("[data-multiplication-range]")) {
	const [fromX, fromY, toX, toY] = JSON.parse(table.dataset.multiplicationRange);
	
	const tBody = table.createTBody();
	
	for(let y = fromY; y <= toY; y++) {
		const row = tBody.insertRow();
		
		for(let x = fromX; x <= toX; x++) {
			const cell = row.insertCell();
			cell.textContent = `${x} × ${y} = ${x * y}`;
		}
	}
}
		
	</script>
</body>
</html>


P.S. Для тех, кто изучает JavaScript.
Вместо того, чтобы искать подходящие таблицы, как это сделано в примере выше (с атрибутом data-multiplication-range), попробуйте создать свой собственный элемент <multiplication-table> с собственным атрибутом range, при изменении которого, будет отрисовываться соответствующая таблица. (или сделайте расширение элемента при помощи атрибута is)

Возможные варианты использования
<multiplication-table range="[1,3, 10,9]"></multiplication-table>

<multiplication-table from="1×3" to="10×9"></multiplication-table>

Или придумайте другие названия и атрибуты!

https://developer.mozilla.org/en-US/...ustom_elements

P. P. S
Сообщение от рони
Привет! Вы куда-то пропали с форума, всё ли у вас в порядке?
Всё в порядке. Я не пропал, вот я тут печатаю, значит не пропал. (Ну я же не буду отвечать подряд на все вопросы, даже не на те, типо как скрыть кнопку/текстик/картиночку при помощи jQuery, несмотря на то, что есть <details>)

Последний раз редактировалось Malleys, 27.12.2018 в 22:16.
Ответить с цитированием