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:

http://jsfiddle.net/36qp9ekL/1196/