[英]How can I convert this function from jquery to pure javascript?
我尝试了很多排列,我太依赖于jQuery,对于这个特定的任务,我必须避免...
我现在陷入困境,无法将其转换为使用纯JavaScript:
$.root_ = $('body'); $.root_.on('click', '[data-action="toggle"]', function(e) { var $this = $(this), element = $(this).attr("data-target") || 'body'; $(element).toggleClass($(this).attr("data-class")); //clear memory reference $this = null; element = null; //save settings //saveSettings(); });
.red-bg { background: #3d1c24; } .white-bg { background: #fff; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <html> <head></head> <body> <a href="#" data-action="toggle" data-class="red-bg">Change BG (RED)</a><br> <a href="#" data-action="toggle" data-class="white-bg">Change BG (WHITE)</a> </body> </html>
document.body.addEventListener('click', function(e) {
var target = e.target; // convenience
var dataset = target.dataset; // convenience
var selector, element;
if (dataset.action == 'toggle') {
selector = dataset.target || 'body';
element = document.querySelector(selector);
if (element) {
element.classList.toggle(dataset['class']);
}
}
//save settings
//saveSettings();
});
注意,这使用了
node.classList
和node.querySelector
,它们可能无法在旧版IE上运行(11岁以上-不知道,请做一些研究)-但是您可以为此类旧技术找到解决方法
注意:如果dataset.target目标的元素可以导致多个元素,请执行此操作
document.body.addEventListener('click', function(e) {
var target = e.target; // convenience
if (target.dataset.action != 'toggle' && target.parentNode.dataset.action == 'toggle') {
target = target.parentNode;
}
var dataset = target.dataset; // convenience
var selector, elements;
if (dataset.action == 'toggle') {
selector = dataset.target || 'body';
elements = document.querySelectorAll(selector);
if (elements.length) {
[].forEach.call(elements, function(element) {
element.classList.toggle(dataset['class']);
});
}
}
//save settings
//saveSettings();
});
document.querySelector('[data-action =“ toggle”]')。onclick = function(){}
和诸如getElementsByClassName和hasClass addClass之类的函数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.