Angular jqLit​​e .find()不会返回任何输入?

时间:2016-12-23 19:52:52

标签: javascript jquery html angularjs

编辑:那么选择器似乎是一个问题? jqLit​​e不支持选择器或它们的缩小版本吗?

find('input')和find('button')将返回结果,但如果我尝试用“:first”或其他东西过滤它,那么它将不返回任何结果。

我似乎无法让jqLit​​e的find()返回我div的任何子输入。

我在ng-show使用的布尔函数上有一个$ watch。因此,当这个div变得可见时,我想将焦点应用于div元素,然后找到第一个输入后代并专注于它。

指令监视的示例div元素:

<div myDirective="function()">
    text and stuff
    <button>
    <another button>
</div>

<div myDirective="function()">
    <input>
</div>

这是我指令中的助手功能:

function highlightAndFocus(node) {
      // focus the div
      node.focus();
      // get angular's jqlite wrapped element
      var task = angular.element(node);
      task.addClass('highlight');

      // these return empty statements
      console.log(task.find('input:first'));
      console.log(task.find('button:visible:not("#cancel"):first'));
}

角度文档说它只能通过标签名称找到,但不是“输入”和“按钮”是什么?

https://docs.angularjs.org/api/ng/function/angular.element

这里发生了什么?当看起来它应该被支持时,仅仅为这个用例包含jquery似乎很愚蠢。我正在打印var任务,我可以在Web控制台中看到输入的子元素。

1 个答案:

答案 0 :(得分:0)

JQlite与jQuery不同。 如果 页面上有jQuery,Angular会使用它,但如果不是,则使用jQlite代替。
The docs明确指出jQlite .find()仅支持按标记名称查找,但它不能与其他选择器(如:first)一起使用。

如果您确实需要,可以使用标准DOM API,即Element.querySelectorAll()