web前端之html+JavaScript实现表格单选与多选、querySelectorAll、getElementById、innerHTML、stringify、push

221 篇文章 6 订阅
84 篇文章 1 订阅


单选

html

<table class="radio-table" border>
	<thead>
		<tr>
			<th>#</th>
			<th>id</th>
			<th>姓名</th>
			<th>年龄</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				<input type="radio" name="select" value="1" onclick="clickRadio()">
			</td>
			<td>1</td>
			<td>张三</td>
			<td>20</td>
		</tr>
		<tr>
			<td>
				<input type="radio" name="select" value="2" onclick="clickRadio()">
			</td>
			<td>2</td>
			<td>李四</td>
			<td>21</td>
		</tr>
		<tr>
			<td>
				<input type="radio" name="select" value="3" onclick="clickRadio()">
			</td>
			<td>3</td>
			<td>王五</td>
			<td>24</td>
		</tr>
	</tbody>
</table>
<h3>当前选择: <span id="checked"></span></h3>
<script src="./index.js"></script>

JavaScript

function clickRadio() {
    document.getElementById('checked').innerHTML = document.querySelector('.radio-table tbody input[type=radio]:checked').value;
}

多选

html

<table class="multi-table" border>
	<thead>
		<tr>
			<th>
				<input id="js-all-checkbox" type="checkbox" onclick="checkAll(this)">
			</th>
			<th>id</th>
			<th>姓名</th>
			<th>年龄</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				<input type="checkbox" name="select" value="1" oninput="clickCheckbox()">
			</td>
			<td>1</td>
			<td>张三</td>
			<td>16</td>
		</tr>
		<tr>
			<td>
				<input type="checkbox" name="select" value="2" oninput="clickCheckbox()">
			</td>
			<td>2</td>
			<td>李四</td>
			<td>17</td>
		</tr>
		<tr>
			<td>
				<input type="checkbox" name="select" value="3" onclick="clickCheckbox()">
			</td>
			<td>3</td>
			<td>王五</td>
			<td>19</td>
		</tr>
	</tbody>
</table>

<h3>当前选中: <span id="js-check-text"></span></h3>

<script src="./index.js"></script>

JavaScript

let checkValues = [];

function clickCheckbox(e) {
    let checkDomArr = document.querySelectorAll('.multi-table tbody input[type=checkbox]:checked');
    
    checkValues = [];
    for (let i = 0, len = checkDomArr.length; i < len; i++) {
        checkValues.push(checkDomArr[i].value);
    }
    updateText();
    
    let allCheckDomArr = document.querySelectorAll('.multi-table tbody input[type=checkbox]');
    let allCheckbox = document.getElementById('js-all-checkbox');
    
    for (let i = 0, len = allCheckDomArr.length; i < len; i++) {
        if (!allCheckDomArr[i].checked) {
            if (allCheckbox.checked) allCheckbox.checked = false;
            break;
        } else if (i === len - 1) {
            document.getElementById('js-all-checkbox').checked = true;
            return;
        }
    }
}

function checkAll(current) {
    let allCheckDomArr = document.querySelectorAll('.multi-table tbody input[type=checkbox]');
    
    if (!current.checked) { // 点击的时候, 状态已经修改, 所以没选中的时候状态时true
        checkValues = [];
        for (let i = 0, len = allCheckDomArr.length; i < len; i++) {
            let checkStatus = allCheckDomArr[i].checked;
            
            if (checkStatus) allCheckDomArr[i].checked = false;
        }
    } else {
        checkValues = [];
        for (let i = 0, len = allCheckDomArr.length; i < len; i++) {
            let checkStatus = allCheckDomArr[i].checked;
            
            if (!checkStatus) allCheckDomArr[i].checked = true;
            checkValues.push(allCheckDomArr[i].value);
        }
    }
    updateText();
}

function updateText() {
	document.getElementById('js-check-text').innerHTML = JSON.stringify(checkValues);
}

相关链接

简书-HTML单选表格和多选表格实现

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值