【问题标题】:Angular jqLite .find() will not return any inputs?Angular jqLit​​e .find() 不会返回任何输入?
【发布时间】:2016-12-23 19:52:52
【问题描述】:

编辑:所以这似乎是选择器的问题? 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 控制台中看到输入子元素。

【问题讨论】:

    标签: javascript jquery html angularjs


    【解决方案1】:

    JQlite 与 jQuery 不同。 如果页面上有jQuery,Angular会使用,如果没有,则使用jQlite代替。
    The docs明确说jQlite的@ 987654324@ 仅支持按标签名称查找,它不适用于其他选择器(如:first)。

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

    【讨论】:

    • 我想我认为选择器是一个基本功能。所以我在这些 div 中有两个按钮,一个是和一个否。如果我搜索“按钮”,那么我会得到两个结果,唯一的方法是关注“是”按钮以将 id="yes" 添加到这些按钮,然后搜索 find('button yes')?
    • @MilanNovaković 当 Angular 刚被构思出来时,jQuery 在 Web 开发社区中仍然非常流行。 Angular 并不打算复制 jQuery 的功能,而是完全提供了一种替代方法来开发结构。有关更广泛的解释,请参阅 this question
    • 那么当有多个结果时如何找到我的输入?这一切也有些古怪。我有另一个指令,其中使用选择器查找似乎正在工作。特别是我正在使用 :visible:not("#cancel") 并且它只抓住我想要的继续按钮,当有十几个定义但只是用 ng-show 隐藏时。
    猜你喜欢
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2020-01-26
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    相关资源
    最近更新 更多