클래스 이름 또는 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.