我试图将jQuery中的一些功能添加到jqLit​​e中,这样就不必用我的角度应用程序加载整个jQuery库。我正在使用Ben Nadel在本文中使用的技术。

http://www.bennadel.com/blog/2753-creating-jqlite-plugins-in-angularjs.htm

我遇到了实现类似this的closedChild插件的困难。

https://github.com/lolmaus/jquery.closestchild/blob/master/jquery.closestchild.js

显然我已经改写了一下,所以看起来像这样。

JQLite.prototype.closestChild = function(selector) {

            var $children, $results;

            $children = this.children();

            if ($children.length === 0){
                return $();
            }

            $results = $children.filter(selector);

            if ($results.length > 0){
                return $results;
            }
            else{
                return $children.closestChild(selector);
            }

        };


...但这会导致此错误。

Error: [jqLite:nosel] http://errors.angularjs.org/1.4.0-rc.0/jqLite/nosel


因此,我进行了一次错误搜索,发现jqLit​​e出于某种原因无法与选择器匹配,只有标记名(这有用吗?)。我不明白的是,它与该文章的Ben的.filter()函数一起运行,当给它一个选择器时,它似乎运行良好。这与我在这一行中调用的功能完全相同。

$results = $children.filter(selector);


所以,我想我的问题是,有没有一种方法可以遍历$ children,看看它们是否与使用纯JavaScript或其他解决方法传递的选择器匹配?

最佳答案

我不确定您对'selector'的期望是什么,但是选择器(如Ben Nadel的代码所示)是回调或DOM节点。

所以它将是

angular.element(document.body)
.find('div')
.closestChild(function(el) {
    var element = angular.element(el);
    console.log(element);
    return !!element.text();
});


jqLit​​e对选择器的支持与手动状态完全相同:它仅对getElementsByTagName起作用,并且仅对find起作用。

对于“较重”的jqLit​​e实现,您可以检查thisthat项目(它们是相当新的,我还没有在工作中尝试过它们,因此随时分享您的印象)。

09-18 06:27