Javascript Angular JS和jqLite将节点匹配到选择器
我正在尝试将jQuery中的一些函数添加到jqLite中,这样就不必用我的angular应用程序加载整个jQuery库。我正在使用本·纳德尔在本文中使用的技术 我很难实现像这样的closestChild插件 很明显,我已经重写了一点,所以看起来像这样Javascript Angular JS和jqLite将节点匹配到选择器,javascript,jquery,angularjs,jqlite,Javascript,Jquery,Angularjs,Jqlite,我正在尝试将jQuery中的一些函数添加到jqLite中,这样就不必用我的angular应用程序加载整个jQuery库。我正在使用本·纳德尔在本文中使用的技术 我很难实现像这样的closestChild插件 很明显,我已经重写了一点,所以看起来像这样 JQLite.prototype.closestChild = function(selector) { var $children, $results; $children = this.c
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
因此,我搜索了一下错误,发现jqLite由于某种原因无法与选择器匹配,只有标记名(这有用吗?)。我不能理解的是,它与那篇文章中Ben的.filter()函数一起运行,当您给它一个选择器时,它似乎工作得很好。这与我在这一行中调用的函数完全相同
$results = $children.filter(selector);
所以,我想我的问题是,有没有一种方法可以循环遍历$children,看看它们是否匹配使用纯javascript传递的选择器,或者其他解决方法?我不确定您对“选择器”的期望是什么,但选择器(如Ben Nadel的代码所示)是回调或DOM节点 是这样的
angular.element(document.body)
.find('div')
.closestChild(function(el) {
var element = angular.element(el);
console.log(element);
return !!element.text();
});
jqLite对选择器的支持与手册中的说明完全相同:它只支持getElementsByTagName
和find
对于“较重”的jqLite实现,您可以进行检查和投影(它们是非常新的,我还没有在工作中尝试过它们,所以请随意分享您的印象)。这真是太棒了,estus,省得我在试图重写jqLite的过程中不知所措。我很想使用第二个,因为它是最小的,但是有东西告诉我,对于一些额外的Kb,可以访问一些额外的东西,比如.closest()可能非常方便,而且它仍然比jQuery小很多。再次感谢。希望他们足够好。不久前,我正要用Sizzle为jqLite供电,直到我发现了这些。