Lựa chọn empty Selector “:empty” là một trong các loại Selectors cơ bản được cung cấp sẵn trong thư viện jQuery được thiết kế để chọn tất cả các phần tử không có nội dung (bao gồm cả các nút văn bản). Đây là ngược lại của “:parent”, tức là nó lựa chọn các phần tử không có con.
1. Cú pháp
Lựa chọn empty Selector “:empty” có mục đích chọn các phần tử không có nội dung (bao gồm cả văn bản).
Cú pháp
$(":empty")
Hoặc
jQuery(":empty")
Kết quả trả về
- Kết quả trả về là danh sách các phần tử mà không có nội dung, bao gồm cả các nút văn bản.
Phiên bản hỗ trợ
- empty Selector “:empty” đã được thêm vào jQuery từ phiên bản 1.0.
2. Một số ví dụ
2.1. Dùng empty Selector để đổi màu phần tử trong bảng
Trong ví dụ dưới đây, sử dụng empty Selector trong thư viện Jquery để đổi màu các phần tử trong bảng.
Tạo một bảng với ô trống ngẫu nhiên, và khi người dùng kích vào ô trống, ô đó sẽ đổi màu nền:
HTML Code:
<!DOCTYPE html>
<html>
<head>
<title>Empty Cell Highlighter</title>
<style>
table {
border-collapse: collapse;
}
td {
border: 1px solid black;
padding: 10px;
text-align: center;
}
td.empty {
background-color: yellow;
}
</style>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
// Generate a 5x5 table with some empty cells
var table = $('<table></table>');
for (var i = 0; i < 5; i++) {
var row = $('<tr></tr>');
for (var j = 0; j < 5; j++) {
var cell = $('<td></td>');
if (Math.random() < 0.3) {
cell.addClass('empty');
}
cell.click(function() {
$(this).toggleClass('empty');
});
row.append(cell);
}
table.append(row);
}
// Append the table to the body
$('body').append(table);
});
</script>
</head>
<body>
<h1>Click on empty cells to toggle background color</h1>
</body>
</html>
2.2. Dùng empty Selector tạo game đi tìm ô trống không
Ví dụ dưới đây là nâng cấp của ví dụ trước, sử dụng empty Selector trong thư viện Jquery để tạo game game đi tìm ô trống trong bảng với các cell có kích thước ngẫu nhiên và không có border. Người dùng nhấn nút “Find Empty Cells” để bắt đầu trò chơi:
HTML Code:
<!DOCTYPE html>
<html>
<head>
<title>Dynamic Table with Empty Cell Highlight</title>
<style>
table, th, td {
border: none;
padding: 10px;
text-align: center;
margin-bottom: 10px;
}
td.found-empty {
background-color: yellow;
border: 1px solid black;
}
</style>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
var emptyCellCount = 0;
var totalEmptyCells = 0;
function generateRandomData(rows, cols) {
var data = [];
totalEmptyCells = 0;
for (var i = 0; i < rows; i++) {
var rowData = [];
for (var j = 0; j < cols; j++) {
var rowspan = Math.floor(Math.random() * 3) + 1; // Random rowspan (1-3)
var colspan = Math.floor(Math.random() * 3) + 1; // Random colspan (1-3)
// Randomly decide if the cell is empty (50% chance)
if (Math.random() < 0.5) {
rowData.push({ value: '', rowspan, colspan });
totalEmptyCells++;
} else {
// Generate some random data
rowData.push({ value: '(' + i + '-' + j + ')', rowspan: 1, colspan: 1 });
}
}
data.push(rowData);
}
return data;
}
function createTable(rows, cols, data) {
var table = $('<table></table>');
for (var i = 0; i < rows; i++) {
var row = $('<tr></tr>');
for (var j = 0; j < cols; j++) {
var cellData = data[i][j];
var cell = $('<td></td>').text(cellData.value);
if (cellData.value === '') {
cell.addClass('empty');
}
if (cellData.rowspan > 1) cell.attr('rowspan', cellData.rowspan);
if (cellData.colspan > 1) cell.attr('colspan', cellData.colspan);
cell.click(function() {
var $this = $(this);
if ($this.hasClass('empty')) {
$this.toggleClass('found-empty');
emptyCellCount += ($this.hasClass('found-empty') ? 1 : -1);
$('#emptyCount').text(emptyCellCount);
if (emptyCellCount === totalEmptyCells) {
alert('Congratulations! You found all empty cells.');
$('table').remove();
}
}
});
row.append(cell);
}
table.append(row);
}
return table;
}
$(document).ready(function() {
$('#findEmptyCells').click(function() {
// Remove any existing tables
$('table').remove();
emptyCellCount = 0;
$('#emptyCount').text(emptyCellCount);
// Generate random data
var rows = Math.floor(Math.random() * 10) + 1; // Random number of rows (1-10)
var cols = Math.floor(Math.random() * 10) + 1; // Random number of columns (1-10)
var data = generateRandomData(rows, cols);
// Create and append the table to the body
var table = createTable(rows, cols, data);
$('body').append(table);
});
});
</script>
</head>
<body>
<button id="findEmptyCells">Find Empty Cells</button>
<div>Empty Cell Count: <span id="emptyCount">0</span></div>
</body>
</html>
Trong phiên bản này, chúng tôi đã thêm lớp found-empty
và điều chỉnh CSS để khi tìm thấy cell trống, nó sẽ được đổi màu thành màu vàng. Biến đếm chỉ được cập nhật khi người dùng chọn một ô trống mới và được giữ sau khi người dùng nhấn nút “Find Empty Cells”.