Angular JS 和 jqLite 将节点匹配到选择器
Angular JS and jqLite match node to selector
我正在尝试将 jQuery 中的一些函数添加到 jqLite 中,这样我就不必使用我的 angular 应用程序加载整个 jQuery 库。我在本文中使用了 Ben Nadel 使用的技术。
http://www.bennadel.com/blog/2753-creating-jqlite-plugins-in-angularjs.htm
我 运行 很难实现像这样的 closestChild 插件。
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
因此,我搜索了错误并发现 jqLite 出于某种原因无法与选择器匹配,只能匹配标签名称(这有用吗?)。我无法理解的是,它是 运行 和那篇文章中 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();
});
jqLite 对选择器的支持与手册状态完全相同:它只支持 getElementsByTagName
并且只支持 find
.
对于 'heavier' jqLite 实现,您可以查看 this and that 项目(它们很新,我还没有在工作中尝试过它们,所以请随时分享您的印象)。
我正在尝试将 jQuery 中的一些函数添加到 jqLite 中,这样我就不必使用我的 angular 应用程序加载整个 jQuery 库。我在本文中使用了 Ben Nadel 使用的技术。
http://www.bennadel.com/blog/2753-creating-jqlite-plugins-in-angularjs.htm
我 运行 很难实现像这样的 closestChild 插件。
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
因此,我搜索了错误并发现 jqLite 出于某种原因无法与选择器匹配,只能匹配标签名称(这有用吗?)。我无法理解的是,它是 运行 和那篇文章中 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();
});
jqLite 对选择器的支持与手册状态完全相同:它只支持 getElementsByTagName
并且只支持 find
.
对于 'heavier' jqLite 实现,您可以查看 this and that 项目(它们很新,我还没有在工作中尝试过它们,所以请随时分享您的印象)。