클래스 이름 또는 ID로 요소를 얻는 방법


125

angularjs로 html에서 요소를 찾으려고합니다.

다음은 html입니다.

<button class="btn btn-primary multi-files" type="button">
   <span>Choose multiple files</span>
</button>
<br/><br/>
<input ng-file-select type="file" multiple  style="display: none"/><br/>

클래스 이름 다중 파일로 버튼 요소를 얻으려고 시도한 다음 시도했습니다.

var multibutton = angular.element(element.getElementsByClassName(".multi-files"));

그러나 작동하지 않고 시도 element.find했지만 태그에서만 작동합니다.

angularjs에서 ID 또는 클래스 이름으로 요소를 가져올 수있는 함수가 있습니까?



지시문을 만들 필요도 없습니다. ng-click과 같은 핸들러를 추가하기 만하면됩니다. 최악의 경우 실제로 요소를 얻으려면 항상 jQuery 구문을 사용할 수 있습니다.
— Lucas Holt 2014 년

답변:


187

getElementsByClassNameDOM 문서의 함수입니다. jQuery도 jqLite 함수도 아닙니다.

사용할 때 클래스 이름 앞에 마침표를 추가하지 마십시오.

var result = document.getElementsByClassName("multi-files");

jqLite (또는 jQuery가 Angular보다 먼저로드 된 경우 jQuery)로 래핑합니다.

var wrappedResult = angular.element(result);

당신이 선택하려는 경우 element지시문의 링크 기능에 당신하여 jqLite 참조 대신 DOM 참조에 액세스해야 - element[0]대신 element:

link: function (scope, element, attrs) {

  var elementResult = element[0].getElementsByClassName('multi-files');
}

또는 document.querySelector함수 를 사용할 수 있습니다 (클래스별로 선택하는 경우 여기에 마침표 필요) :

var queryResult = element[0].querySelector('.multi-files');
var wrappedQueryResult = angular.element(queryResult);

데모 : http://plnkr.co/edit/AOvO47ebEvrtpXeIzYOH?p=preview


1
angular가 아직 요소를 생성 할 기회가 없었기 때문에 link 함수 내에서 element.childElementCount가 0 일 수 있으므로 element [0] .getElement.에 대한 결과를 처리 할 준비가되어 있어야합니다. .
— Dylanthepiguy

27

당신은 추가 할 필요가 없습니다 .에를 getElementsByClassName, 즉

var multibutton = angular.element(element.getElementsByClassName("multi-files"));

그러나 angular.element를 사용할 때는 jquery 스타일 선택기를 사용해야합니다.

angular.element('.multi-files');

트릭을해야합니다.

또한 이 문서에서 "jQuery를 사용할 수있는 경우 angular.element는 jQuery 함수의 별칭입니다. jQuery를 사용할 수없는 경우 angular.element는"jQuery lite "또는"jqLite "라고하는 Angular의 기본 제공 jQuery 하위 집합에 위임합니다. ""


안녕하세요, 답장을
— Justin

작동하거나 작동하지 않을 수 있습니다. 지금 내 대답을 확인하십시오 (수정하십시오). 당신은 아마도 무엇을 해야할지 알게 될 것입니다.
— Ashesh

함수가 정의되지 않은 경우 아마도 jquery를로드하지 않았을 것입니다. jqlite (@Ashesh가 언급 한대로 jquery를로드하지 않은 경우 사용됨)에는 jquery가 가진 모든 함수가 없으며 getElementsByClassName이 그중 하나입니다.
— haimlit

5
angular.element ( '다중 파일'); 작동하지 않습니다. 기간이 필요합니다.
— Philippe Gioseffi

var multibutton = angular.element (document.getElementsByClassName ( "multi-files"));
— Salman Lone

20

@tasseKATT의 답변은 훌륭하지만 지시문을 만들고 싶지 않다면 왜 사용하지 $document않습니까?

.controller('ExampleController', ['$scope', '$document', function($scope, $document) {
  var dumb = function (id) {
  var queryResult = $document[0].getElementById(id)
  var wrappedID = angular.element(queryResult);
  return wrappedID;
};

PLUNKR


2
angular.element('#Your element id')같은 일을합니다.
— 말 많은 사람

3
각도 1.5.8에서이 오류가 발생합니다. "선택기를 통해 요소를 찾는 것은 jqLite를 지원하지 않습니다"
— SP 싱

-4

클래스 이름으로 만 버튼을 찾고 jQLite 만 사용하려면 다음과 같이 할 수 있습니다.

var myListButton = $document.find('button').filter(function() {
    return angular.element(this).hasClass('multi-files');
});

도움이 되었기를 바랍니다. :)


1
이것은 angular 및 jquery를 사용하지 않으며 잘못된 문장도 사용합니다. 실제로 jquery를 사용하여 jqlite를 대체 할 수 있습니다. 바닐라 자바 ​​스크립트 요소 ($ document [0])로 이동하지 않고 각도 환경에서이 작업을 수행하는 올바른 방법입니다.
— Dennis Bartlett
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.