Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取控件中的对象_Javascript_Jquery_Angularjs_Angularjs Ng Click - Fatal编程技术网

Javascript 获取控件中的对象

Javascript 获取控件中的对象,javascript,jquery,angularjs,angularjs-ng-click,Javascript,Jquery,Angularjs,Angularjs Ng Click,我需要通过jQuery在控制器中单击一个元素来获取DOM对象 HTML <ul> <li ng-repeat="data in list"> <span ng-click="editMode(this, data.id)">edit</span> </li> </ul> 变量obj有一个元素,但我无法使用它。 如果我尝试$(obj.hide()什么也没发生 编辑:这不是以角度隐藏元素的正确

我需要通过jQuery在控制器中单击一个元素来获取DOM对象

HTML

<ul>
    <li ng-repeat="data in list">
        <span ng-click="editMode(this, data.id)">edit</span>
    </li>
</ul>
变量obj有一个元素,但我无法使用它。 如果我尝试$(obj.hide()什么也没发生



编辑:这不是以角度隐藏元素的正确方法!这只是一个例子!使用ng Hide隐藏元素。

在您的示例中
引用当前的角度
$scope
实例,而不是元素。获取元素的最简单方法是通过事件对象:

<span ng-click="editMode($event, data.id)">edit</span>

注意:这不被认为是角度测量的良好实践。假设您的
editMode
函数只隐藏一个元素,您可以使用
ng hide
ng show
指令来实现它,正如在对您的问题的评论中所提到的。

就像我在评论中所说的,您应该有一个支持数据模型,并在html中声明反应

下面是小提琴的例子:

  • 编辑
  • 函数DataCtrl($scope){ $scope.list=[{},{},{}]; $scope.editMode=函数(obj){ obj.isInEditMode=true; }; };
    我想角度的方式更适合于
    ng show=“!isInEditMode”
    (不确定精确的语法)的行,而不是外部dom操作。正如我在下面的评论中所说,这只是为了测试。我知道ng隐藏和ng显示。谢谢这同样适用于任何jQuery方法,而不仅仅是隐藏的?您的解决方案是使用
    nghide
    ,对一些可以轻松通过声明方式解决的问题进行DOM操作?这是坏的角度。更详细地说,这看起来不太可测试,我在概念上所做的是隐藏元素,而不是在函数执行时隐藏某个事件的目标。@BenjaminGruenbaum-我的解决方案只是以当前的形式回答了这个问题。我同意,这不是理想的角度解。“我还假设这个函数实际上不仅仅是隐藏一个元素。”Jamesalardice回答说,其他途径是可以接受的。“回答教坏习惯而不说这是坏习惯,更不用说了。”詹德沃夏克完全同意。关于这个问题的评论中已经提出了另一条途径,所以我觉得没有必要在这里重复。但我应该在回答中记下这一点。对不起,伙计们。我想我贴了一个不好的例子。我知道ng隐藏和ng显示方式。我使用这个jQuery隐藏函数只是为了测试元素是否被调用。谢谢你的回答!明天上班时我会试试。
    <span ng-click="editMode($event, data.id)">edit</span>
    
    $scope.editMode = function(e, id) {
        $(e.target).hide();
    };
    
    <li ng-repeat="data in list">
        <span ng-click="editMode(data)" ng-hide="data.isInEditMode">edit</span>
    </li>
    
    function DataCtrl($scope) {
        $scope.list = [{}, {}, {}];
        $scope.editMode = function(obj) {
            obj.isInEditMode = true;
        };
    };