Angularjs 元素在一次调用中同时找到 select 和输入 - 限制是单个标记查找吗?
Angularjs Element find both select and input in one call - is the limit a single tag lookup?
我有一个指令,我想在其中找到 <input/>
和 <select>
元素以将 blur
事件绑定到它们。我知道我可以用 ng-blur
来完成,但这个问题实际上是关于 angular.element
选择器的。
link: function(scope, elem, attrs){
elem.find( 'input, select' ).bind( 'blur', someFunction); // doesn't work as input, select returns length 0
// this works when separated
elem.find( 'input' ).bind( 'blur', someFunction);
elem.find( 'select' ).bind( 'blur', someFunction);
}
我想问题是为什么第一种方法行不通?
documentation 状态:
find() - Limited to lookups by tag name
from https://docs.angularjs.org/api/ng/function/angular.element
但并没有说它仅限于单个标签查找。难道我做错了什么?我是否遗漏了某些文档?
显然我们这里没有 jQuery API,所以我对它 不起作用 并不感到惊讶。缺少文档 - 也不足为奇。但是,如果您查看 source, .find()
is nothing more than a wrapper around getElementsByTagName。所以 - 我们在这里不买太多。换句话说,复合选择器不起作用...
// jqLite.js#L998
find: function(element, selector) {
if (element.getElementsByTagName) {
return element.getElementsByTagName(selector);
} else {
return [];
}
}
您也可以使用 querySelectorAll
.
element[0].querySelectorAll('input, select')
这是一个 jsfiddle:
我有一个指令,我想在其中找到 <input/>
和 <select>
元素以将 blur
事件绑定到它们。我知道我可以用 ng-blur
来完成,但这个问题实际上是关于 angular.element
选择器的。
link: function(scope, elem, attrs){
elem.find( 'input, select' ).bind( 'blur', someFunction); // doesn't work as input, select returns length 0
// this works when separated
elem.find( 'input' ).bind( 'blur', someFunction);
elem.find( 'select' ).bind( 'blur', someFunction);
}
我想问题是为什么第一种方法行不通?
documentation 状态:
find() - Limited to lookups by tag name from https://docs.angularjs.org/api/ng/function/angular.element
但并没有说它仅限于单个标签查找。难道我做错了什么?我是否遗漏了某些文档?
显然我们这里没有 jQuery API,所以我对它 不起作用 并不感到惊讶。缺少文档 - 也不足为奇。但是,如果您查看 source, .find()
is nothing more than a wrapper around getElementsByTagName。所以 - 我们在这里不买太多。换句话说,复合选择器不起作用...
// jqLite.js#L998
find: function(element, selector) {
if (element.getElementsByTagName) {
return element.getElementsByTagName(selector);
} else {
return [];
}
}
您也可以使用 querySelectorAll
.
element[0].querySelectorAll('input, select')
这是一个 jsfiddle: