5

我想在指令中实现这段代码,但在 jQLite 中这不起作用应该怎么做?

 var thisCell = element.closest('.sampleclass');
4

3 回答 3

4

如MDN.closest上所示,Firefox 和 Chrome 中有一个实验版本- Element.closest()

考虑到这一点,你可以写这样的东西

var elm = document.querySelector('.myClass').closest();

或与angular.element

var elm = angular.element(document.querySelector('.myClass').closest());

当然,规则总是有例外(又名IE),对于他们,您可以使用也显示在MDN 上的 Polyfill - Element.closest()

if (window.Element && !Element.prototype.closest) {
    Element.prototype.closest = 
    function(s) {
        var matches = (this.document || this.ownerDocument).querySelectorAll(s),
            i,
            el = this;
        do {
            i = matches.length;
            while (--i >= 0 && matches.item(i) !== el) {};
        } while ((i < 0) && (el = el.parentElement)); 
        return el;
    };
}

我通过执行这行代码成功地使用它来获得最接近的元素名称形式(它适用于IEPolyfill:

var form document.querySelector('[name="elmName"]').closest("form");
于 2016-12-15T14:28:00.963 回答
3

您必须手动实现此功能,例如:

var thisCell = (function closest(e, className) {
  if (e[0].nodeName == "HTML") {
    return null;
  } else if (e.hasClass(className)) {
    return e;
  } else {
    return closest(e.parent(), className);
  }
})(element, "sampleclass");
于 2016-02-08T14:37:32.430 回答
1

文件指出:

对于按标签名称查找,请尝试使用 angular.element(document).find(...) 或 $document.find(),或使用标准 DOM API,例如 document.querySelectorAll()。

于 2016-02-08T14:29:31.597 回答