JavaScript 等价于 jQuery .on() 和额外的选择器
JavaScript equivalent for jQuery .on() with additional selector
这是 JSFiddle 的例子:https://jsfiddle.net/1a6j4es1/1/
$('table').on('click', 'td', function() {
$(this).css('background', 'green');
});
如何用普通代码重写此代码JavaScript?
即使对于 table
元素内的新 td
元素,回调函数也应该有效。
更新:我找到了一个非常简洁的解决方案:https://jsfiddle.net/1a6j4es1/28/
function delegateSelector(selector, event, childSelector, handler) {
var is = function(el, selector) {
return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector);
};
var elements = document.querySelectorAll(selector);
[].forEach.call(elements, function(el, i){
el.addEventListener(event, function(e) {
if (is(e.target, childSelector)) {
handler(e);
}
});
});
}
delegateSelector('table', "click", 'td', function(e) {
e.target.style.backgroundColor = 'green';
});
为您希望点击的元素添加一个 ID,并使用此代码:
document.getElementById("tableId").addEventListener("click", function(e){
e.target.style.background = 'green';
});
<table id="clickable" onclick="changecolor(this)" border=1>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
</table>
<script>
function changecolor(table)
{
document.getElementById("clickable").addEventListener("click",tableClicked);
function tableClicked(e) {
e.target.style.backgroundColor = 'green';
}
}
</script>
这对我有用..
这是 JSFiddle 的例子:https://jsfiddle.net/1a6j4es1/1/
$('table').on('click', 'td', function() {
$(this).css('background', 'green');
});
如何用普通代码重写此代码JavaScript?
即使对于 table
元素内的新 td
元素,回调函数也应该有效。
更新:我找到了一个非常简洁的解决方案:https://jsfiddle.net/1a6j4es1/28/
function delegateSelector(selector, event, childSelector, handler) {
var is = function(el, selector) {
return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector);
};
var elements = document.querySelectorAll(selector);
[].forEach.call(elements, function(el, i){
el.addEventListener(event, function(e) {
if (is(e.target, childSelector)) {
handler(e);
}
});
});
}
delegateSelector('table', "click", 'td', function(e) {
e.target.style.backgroundColor = 'green';
});
为您希望点击的元素添加一个 ID,并使用此代码:
document.getElementById("tableId").addEventListener("click", function(e){
e.target.style.background = 'green';
});
<table id="clickable" onclick="changecolor(this)" border=1>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
</table>
<script>
function changecolor(table)
{
document.getElementById("clickable").addEventListener("click",tableClicked);
function tableClicked(e) {
e.target.style.backgroundColor = 'green';
}
}
</script>
这对我有用..