target.getAttribute获取调用这个程序的元素的属性或id等

本文介绍了一个简单的JavaScript函数setEffect,该函数通过获取调用它的元素的ID来为不同的UI效果提供支持。示例中提供了四个不同ID的链接,每个链接代表一种不同的视觉效果。

如:

function setEffect(e)

{

var id = e.target.getAttribute("id");  //获取调用setEffect函数元素的id

}


<a class="effect" id="normal"></a>   //会是4个中的1个
<a class="effect" id="western"></a>
<a class="effect" id="noir"></a>
<a class="effect" id="scifi"></a>

要求每句添加注释 var left, right, bottom, prev, radioTit, contentList; var questionList = [], option = '', timer = null; init() function init() { left = document.querySelector('.left'); right = document.querySelector('.right'); bottom = document.querySelector('.bottom'); radioTit = document.querySelector('.radio-tit'); contentList = document.querySelector('.content-list'); questionList = localStorage.questionList ? JSON.parse(localStorage.questionList) : []; right.addEventListener('click', rightClickHandler); radioTit.addEventListener('click', titClickHandler); contentList.addEventListener('click', listClickHandler); contentList.addEventListener('input', inputHandler); render(); } function rightClickHandler(e) { if (!/li/i.test(e.target.nodeName)) return; if (prev) prev.style.display = 'none' const option = e.target.className.match(/\w+(?=-)/)[0]; prev = document.querySelector('.' + option); prev.style.display = 'block'; } function titClickHandler(e) { if (!/button/i.test(e.target.nodeName)) return; if (e.target.className === 'add') { questionList.push({ question: '', options: ['', '', '', ''], result: '' }) localStorage.questionList = JSON.stringify(questionList); render(); } else { questionList.length = 0; localStorage.questionList = JSON.stringify(questionList); render(); document.querySelector('.radio').style.display = 'none' } } function listClickHandler(e) { if (!e.target.classList.contains('btn')) return const id = e.target.getAttribute('data'); if (e.target.classList.contains('content-delete')) { questionList.splice(id, 1); localStorage.questionList = JSON.stringify(questionList); render(); } else if (e.target.classList.contains('select')) { if (e.target.innerHTML === '选择') { const result = e.target.getAttribute('name'); questionList[id].result = result; } else { questionList[id].result = ''; } localStorage.questionList = JSON.stringify(questionList); render() } else if (e.target.classList.contains('option-add')) { questionList[id].options.push(''); localStorage.questionList = JSON.stringify(questionList); render(); } else if (e.target.classList.contains('option-delete')) { if (questionList[id].options.length <= 4) { alert('至少保留4个选项') } else { questionList[id].options.pop() localStorage.questionList = JSON.stringify(questionList); render(0) } } } function inputHandler(e) { if (timer) clearTimeout(timer); timer = setTimeout(() => { timer = null; const name = e.target.getAttribute('name'), id = e.target.getAttribute('data'); if (name === 'question') { questionList[id].question = e.target.value; } else { idx = e.target.getAttribute('name') - 1; questionList[id].options[idx] = e.target.value; } localStorage.questionList = JSON.stringify(questionList); }, 500) } function render() { contentList.innerHTML = questionList.map((item, index) => { return `<li> <div class="content-tit">单选题${index + 1}: <div class="content-delete btn" data="${index}">删除</div> </div> <div class="content-question"> <div class="question"> <label for="question">题目 :</label> <input name="question" type="text" value="${item.question}" data=${index}> </div>`+ item.options.map((it, idx) => { return `<div> <label for="${idx + 1}">${option = String.fromCharCode(idx + 65)}:</label> <input name="${idx + 1}" type="text" value="${it}" data=${index}> <div class="select btn" data="${index}" name="${option}">${item.result === option ? '√' : '选择'}</div> ${idx === item.options.length - 1 ? '<div class="option-add btn" data="' + index + '">添加</div><div class="option-delete btn" data="' + index + '">删除</div>' : ''} </div>` }).join('') + `</div></li>` }).join('') }
08-03
document.addEventListener('DOMContentLoaded', function () { // 获取元素 const list = document.getElementById('list'); const addBtn = document.getElementById('addBtn'); const clearBtn = document.getElementById('clearBtn'); const saveBtn = document.getElementById('saveBtn'); const resetBtn = document.getElementById('resetBtn'); // 题目数据 let questions = JSON.parse(localStorage.getItem('questions')) || []; // 初始渲染 render(); // 添加题目 addBtn.addEventListener('click', function () { questions.push({ id: Date.now(), title: '', options: [ { id: 1, text: '', correct: false }, { id: 2, text: '', correct: false }, { id: 3, text: '', correct: false }, { id: 4, text: '', correct: false } ] }); saveRender(); }); // 清空题目 clearBtn.addEventListener('click', function () { if (confirm('确定要清空所有题目吗?此操作不可恢复!')) { questions = []; saveRender(); } }); // 保存题目 saveBtn.addEventListener('click', function () { localStorage.setItem('questions', JSON.stringify(questions)); alert('题目已成功保存!'); }); // 重置题目 resetBtn.addEventListener('click', function () { questions = JSON.parse(localStorage.getItem('questions')) || []; render(); alert('已恢复上次保存的内容'); }); // 列表点击事件 list.addEventListener('click', function (e) { if (!e.target.closest('.item')) return; const id = parseInt(e.target.closest('.item').dataset.id); const q = questions.find(item => item.id === id); // 删除题目 if (e.target.classList.contains('del-btn')) { if (confirm('确定要删除这道题目吗?')) { questions = questions.filter(item => item.id !== id); saveRender(); } } // 选择答案 if (e.target.classList.contains('sel-btn')) { const optId = parseInt(e.target.dataset.optId); q.options.forEach(opt => opt.correct = false); q.options.find(opt => opt.id === optId).correct = true; saveRender(); } // 添加选项 if (e.target.classList.contains('add-opt')) { const newId = q.options.length > 0 ? Math.max(...q.options.map(opt => opt.id)) + 1 : 1; q.options.push({ id: newId, text: '', correct: false }); saveRender(); } // 删除选项 if (e.target.classList.contains('del-opt')) { if (q.options.length <= 4) { alert('至少需要保留4个选项!'); return; } q.options.pop(); saveRender(); } }); // 输入处理 list.addEventListener('input', function (e) { if (!e.target.closest('.item')) return; const id = parseInt(e.target.closest('.item').dataset.id); const q = questions.find(item => item.id === id); // 题目输入 if (e.target.classList.contains('q-input')) { q.title = e.target.value; } // 选项输入 if (e.target.classList.contains('opt-input')) { const optId = parseInt(e.target.dataset.optId); const opt = q.options.find(item => item.id === optId); opt.text = e.target.value; } save(); }); // 保存数据 function save() { localStorage.setItem('questions', JSON.stringify(questions)); } // 保存并渲染 function saveRender() { save(); render(); } // 渲染题目 function render() { list.innerHTML = questions.map((q, idx) => { const opts = q.options.map(opt => ` <div class="opt"> <div class="opt-label">${String.fromCharCode(64 + opt.id)}</div> <input type="text" class="opt-input" placeholder="选项内容..." value="${opt.text}" data-opt-id="${opt.id}" > <button class="sel-btn" data-opt-id="${opt.id}" style="background: ${opt.correct ? '#28a745' : ''}" > ${opt.correct ? '✓ 已选' : '选择'} </button> </div> `).join(''); return ` <div class="item" data-id="${q.id}"> <div class="title"> <h4>题目 ${idx + 1}</h4> <button class="btn del-btn">删除</button> </div> <input type="text" class="q-input" placeholder="请输入题目内容..." value="${q.title}" > <div>${opts}</div> <div class="opt-ctrl"> <button class="btn add-opt">添加选项</button> <button class="btn del-opt">删除选项</button> </div> </div> `; }).join(''); } }); 将以上代码按照以下代码格式写 变量名不变 var left, right, bottom, prev, radioTit, contentList; var questionList = [], option = ‘’, timer = null; init() function init() { left = document.querySelector(‘.left’); right = document.querySelector(‘.right’); bottom = document.querySelector(‘.bottom’); radioTit = document.querySelector(‘.radio-tit’); contentList = document.querySelector(‘.content-list’); questionList = localStorage.questionList ? JSON.parse(localStorage.questionList) : []; right.addEventListener('click', rightClickHandler); radioTit.addEventListener('click', titClickHandler); contentList.addEventListener('click', listClickHandler); contentList.addEventListener('input', inputHandler); render(); } function rightClickHandler(e) { if (!/li/i.test(e.target.nodeName)) return; if (prev) prev.style.display = ‘none’ const option = e.target.className.match(/\w+(?=-)/)[0]; prev = document.querySelector(‘.’ + option); prev.style.display = ‘block’; } function titClickHandler(e) { if (!/button/i.test(e.target.nodeName)) return; if (e.target.className === ‘add’) { questionList.push({ question: ‘’, options: [‘’, ‘’, ‘’, ‘’], result: ‘’ }) localStorage.questionList = JSON.stringify(questionList); render(); } else { questionList.length = 0; localStorage.questionList = JSON.stringify(questionList); render(); document.querySelector(‘.radio’).style.display = ‘none’ } } function listClickHandler(e) { if (!e.target.classList.contains(‘btn’)) return const id = e.target.getAttribute(‘data’); if (e.target.classList.contains(‘content-delete’)) { questionList.splice(id, 1); localStorage.questionList = JSON.stringify(questionList); render(); } else if (e.target.classList.contains(‘select’)) { if (e.target.innerHTML === ‘选择’) { const result = e.target.getAttribute(‘name’); questionList[id].result = result; } else { questionList[id].result = ‘’; } localStorage.questionList = JSON.stringify(questionList); render() } else if (e.target.classList.contains(‘option-add’)) { questionList[id].options.push(‘’); localStorage.questionList = JSON.stringify(questionList); render(); } else if (e.target.classList.contains(‘option-delete’)) { if (questionList[id].options.length <= 4) { alert(‘至少保留4个选项’) } else { questionList[id].options.pop() localStorage.questionList = JSON.stringify(questionList); render(0) } } } function inputHandler(e) { if (timer) clearTimeout(timer); timer = setTimeout(() => { timer = null; const name = e.target.getAttribute(‘name’), id = e.target.getAttribute(‘data’); if (name === ‘question’) { questionList[id].question = e.target.value; } else { idx = e.target.getAttribute(‘name’) - 1; questionList[id].options[idx] = e.target.value; } localStorage.questionList = JSON.stringify(questionList); }, 500) } function render() { contentList.innerHTML = questionList.map((item, index) => { return <li> <div class="content-tit">单选题${index + 1}: <div class="content-delete btn" data="${index}">删除</div> </div> <div class="content-question"> <div class="question"> <label for="question">题目 :</label> <input name="question" type="text" value="${item.question}" data=${index}> </div>+ item.options.map((it, idx) => { return <div> <label for="${idx + 1}">${option = String.fromCharCode(idx + 65)}:</label> <input name="${idx + 1}" type="text" value="${it}" data=${index}> <div class="select btn" data="${index}" name="${option}">${item.result === option ? '√' : '选择'}</div> ${idx === item.options.length - 1 ? '<div class="option-add btn" data="' + index + '">添加</div><div class="option-delete btn" data="' + index + '">删除</div>' : ''} </div> }).join(‘’) + </div></li> }).join(‘’) }
08-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值