Angularjs元素在一个调用中同时查找select和input-这是单个标记查找的极限

Angularjs Element find both select and input in one call - is the limit a single tag lookup?

本文关键字:查找 input- select 极限 单个标 元素 调用 一个 Angularjs      更新时间:2024-04-11

我有一个指令,希望在其中找到<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);
}

我想问题是为什么第一种方法不起作用?

文件说明:

find()-仅限于按标记名查找从…起https://docs.angularjs.org/api/ng/function/angular.element

但并没有说它仅限于单个标签查找。我做错什么了吗?我是不是遗漏了一些文件?

显然我们这里没有jQuery API,所以我对它不起作用并不感到惊讶。缺少这些文件,这也不足为奇。但是,如果您查看源代码,.find()只不过是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/