如何为e.target声明一个变量以将其用于两个函数?

时间:2017-10-08 12:58:46

标签: javascript jquery events

我想声明一个变量,这样我就不必为同一类事件遍历DOM两次了。

where tar_date < '2016-08-26'

在这里,我使用两个$ elem几乎做同样的事情。我不能将e.target放在用于回调的任何函数之外。

这是我的完整代码以供更多参考。

function onHoverChange(e){
    var $elem = $(e.target).closest('li');
    $elem.toggleClass('delete');
}
function addTodo(e){
    var $elem = $(e.target).closest('li');
    todo.push($input.val());
    $input.val('');
    render();
}

感谢。

1 个答案:

答案 0 :(得分:0)

如果您有多个<ul/><foo class="del"/>,那么您每次都要重新计算.closest('li')选项或计算一次并将它们放入哈希值: / p>

let $targetToLi = $ul.add($del).get().reduce((acc, ent) => {
    return $(ent).closest('li');
}, {});

并在每个回调中使用它,如:

var $elem = $targetToLi[$(e.target)];

如果某些$ul和$ del`元素未被点击,则可以使其变得懒惰:

let $targetToLi = {};
function lookupLi(clicked) {
    if (clicked in $targetToLi) {
        return $targetToLi[clicked];
    } else {
        let ret = $(clicked).closest('li');
        $targetToLi[clicked] = ret;
        return ret;
    }
}

如果您不关心兑现,但只想干掉代码,那么可以创建一个函数var $elem = getLi(e.target)来隐藏对.closest()的调用,但它会可能只有在你给它一个名字帮助未来的读者理解你并没有得到最接近的li但为什么这样做的时候才有用。