Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.06.2023, 09:30
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

"Странное" поведение таблицы
Здравствуй, JavaScript-мир!
Не получается завершить задуманное: случайные изображения выстраиваются в ряд, вместо того, чтобы отображаться в таблице 2×2.
Пожалуйста, помогите разобраться:

<!DOCTYPE html>
<html>
<head>
<style>        
        [data-id="girl"] {
            background-image:url(https://loremflickr.com/100/100/girl?random=1); 
            width: 100px;
            height: 100px;
            }
 
         [data-id="boy"] {
            background-image:url(https://loremflickr.com/100/100/boy?random=1); 
            width: 100px;
            height: 100px;
            }
 
         [data-id="cat"] {
            background-image:url(https://loremflickr.com/100/100/cat?random=1); 
            width: 100px;
            height: 100px;
            }
 
         [data-id="dog"] {
            background-image:url(https://loremflickr.com/100/100/dog?random=1); 
            width: 100px;
            height: 100px;
            }
 
         [data-id="car"] {
            background-image:url(https://loremflickr.com/100/100/car?random=1); 
            width: 100px;
            height: 100px;
            }
 
         [data-id="house"] {
            background-image:url(https://loremflickr.com/100/100/house?random=1); 
            width: 100px;
            height: 100px;
            }
    </style>

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
</script>
<script type="text/javascript">
    $(window).load(function(){
    $("td.Image").hide();
    var divs = $("td.Image").get().sort(function(){ 
    return Math.round(Math.random())-0.5; 
    }).slice(0,4)
    $(divs).appendTo(divs[0].parentNode).show();
    });
</script>
</head>
<body>
 
<table align="center" cellspacing="0" cellpadding="0">
            <tr>
                <td class="Image" data-id="girl"></td>
                <td class="Image" data-id="boy"></td> 
                <td class="Image" data-id="cat"></td>                 
            </tr> 
            <tr>
                <td class="Image" data-id="dog"></td>
                <td class="Image" data-id="car"></td> 
                <td class="Image" data-id="house"></td>                 
            </tr>
        </table>
        
</body>
</html>


Ответить с цитированием
  #2 (permalink)  
Старый 23.06.2023, 09:50
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Ну так вы выстраиваете их после сортировки без учета того, что они были в разных строках (<tr>). Все лепите в одну строку.
К тому же вы берете из "отсортированного" массива только первые 4 элемента и их потом лепите в одну строку и только к ним применяете .show().

Последний раз редактировалось voraa, 23.06.2023 в 10:07.
Ответить с цитированием
  #3 (permalink)  
Старый 23.06.2023, 10:03
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Voraa, видимо, так ... но пока самостоятельно исправить не получается
Ответить с цитированием
  #4 (permalink)  
Старый 23.06.2023, 10:24
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Сообщение от voraa
лепите в одну строку
Леплю((( Учусь новому на старости лет...
Ответить с цитированием
  #5 (permalink)  
Старый 23.06.2023, 10:42
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

<!DOCTYPE html>
<html>
<head>
<style>       
        [data-id="girl"] {
            background-image:url(https://loremflickr.com/100/100/girl?random=1);
            width: 100px;
            height: 100px;
            }
  
         [data-id="boy"] {
            background-image:url(https://loremflickr.com/100/100/boy?random=1);
            width: 100px;
            height: 100px;
            }
  
         [data-id="cat"] {
            background-image:url(https://loremflickr.com/100/100/cat?random=1);
            width: 100px;
            height: 100px;
            }
  
         [data-id="dog"] {
            background-image:url(https://loremflickr.com/100/100/dog?random=1);
            width: 100px;
            height: 100px;
            }
  
         [data-id="car"] {
            background-image:url(https://loremflickr.com/100/100/car?random=1);
            width: 100px;
            height: 100px;
            }
  
         [data-id="house"] {
            background-image:url(https://loremflickr.com/100/100/house?random=1);
            width: 100px;
            height: 100px;
            }
    </style>
 
<script type="text/javascript">
window.addEventListener("DOMContentLoaded", () => {
	const tab = document.querySelector('table');
	const cells = [...document.querySelectorAll('td.Image')];
	cells.sort(() =>Math.round(Math.random())-0.5);
	tab.rows[0].append(...cells.slice(0,3));
	tab.rows[1].append(...cells.slice(3));
})
</script>
</head>
<body>
  
<table align="center" cellspacing="0" cellpadding="0">
            <tr>
                <td class="Image" data-id="girl"></td>
                <td class="Image" data-id="boy"></td>
                <td class="Image" data-id="cat"></td>                
            </tr>
            <tr>
                <td class="Image" data-id="dog"></td>
                <td class="Image" data-id="car"></td>
                <td class="Image" data-id="house"></td>                
            </tr>
        </table>
         
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 23.06.2023, 10:42
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Сообщение от voraa
вы берете из "отсортированного" массива только первые 4 элемента и их потом лепите в одну строку и только к ним применяете .show().
Задумано, что рандомно будут браться только 4 элемента, поэтому отображаться должны тоже 4 в виде таблицы 2×2
Ответить с цитированием
  #7 (permalink)  
Старый 23.06.2023, 10:44
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Если учитесь НОВОМУ, то забудьте про jquery. Он слишком старый.
Ответить с цитированием
  #8 (permalink)  
Старый 23.06.2023, 10:46
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Сообщение от Борис К
Задумано, что рандомно будут браться только 4 элемента, поэтому отображаться должны тоже 4 в виде таблицы 2×2
Тогда строки 47-48
tab.rows[0].innerHTML = '';
tab.rows[0].append(...cells.slice(0,2));
tab.rows[1].innerHTML = '';
tab.rows[1].append(...cells.slice(2,4));

Последний раз редактировалось voraa, 23.06.2023 в 10:52.
Ответить с цитированием
  #9 (permalink)  
Старый 23.06.2023, 11:17
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Сообщение от voraa
Если учитесь НОВОМУ, то забудьте про jquery. Он слишком старый.
Да, я "догадывался"... благодарю за подсказку!)
Voraa, всё отлично сработало... большое Вам спасибо за ценную помощь!
Ответить с цитированием
  #10 (permalink)  
Старый 23.06.2023, 17:22
Кандидат Javascript-наук
Отправить личное сообщение для Борис К Посмотреть профиль Найти все сообщения от Борис К
 
Регистрация: 22.02.2017
Сообщений: 145

Voraa, а какую строку следовало бы прописать в ваш код, чтобы кнопка <button id="btn">New</button> создавала новую комбинацию изображений в таблице?
*Самостоятельно не осилил *
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как исправить дерганья липкой шапки таблицы на мобильных? crabosse0 Элементы интерфейса 0 28.05.2018 18:28
Вывод из таблицы в БД c помощью AJAX smart-create AJAX и COMET 4 29.12.2016 20:44
почему не обрабатываются события в динамически добавленых строках таблицы boris2000 Events/DOM/Window 2 10.11.2016 14:04
Генерация таблицы из JSON Lemme Общие вопросы Javascript 34 23.07.2015 21:55
Через ajax отправить много данных из таблицы на сервер Heger jQuery 3 29.08.2012 18:51