"document.getElementByClass는 함수가 아닙니다"


142

onclick로 모든 버튼 의 기능을 실행하려고합니다 class="stopMusic". Firebug에서 오류가 발생합니다

document.getElementByClass는 함수가 아닙니다

내 코드는 다음과 같습니다.

var stopMusicExt = document.getElementByClass("stopButton");
    stopButton.onclick = function() {
        var ta = document.getElementByClass("stopButton");
        document['player'].stopMusicExt(ta.value);
        ta.value = "";
    };


함수 이름에 's'가 없습니다. 허용 된 답변에서 누락 된 's'를 둘러싼 요점은 그다지 분명하지 않습니다. 따라서 여기에 주석을 달았습니다.
Anurag Priyadarshi

답변:


249

아마도 의미있는 document.getElementsByClassName()(그리고 결과 노드 목록에서 첫 번째 항목을 가져옵니다) :

var stopMusicExt = document.getElementsByClassName("stopButton")[0];

stopButton.onclick = function() {
    var ta = document.getElementsByClassName("stopButton")[0];
    document['player'].stopMusicExt(ta.value);
    ta.value = "";
};

여전히 오류가 발생할 수 있습니다

document.getElementsByClassName 기능이 아니다

그러나 이전 브라우저에서는 이전 브라우저를 지원해야하는 경우 대체 구현을 제공 할 수 있습니다.


감사합니다. 브라우저와 호환되는 모든 클래스 이름을 선택하는 기능이 있습니까? 또는 배열 노드의 범위를 선택할 수 있습니까? (예 : 0-100)?
user547794

내장 구현이 아닙니다. Mootools 또는 jQuery와 같은 라이브러리를 사용해야 할 수도 있습니다 (매우 쉬워집니다).
BoltClock

가벼운보다 jQuery 라이브러리가하는 단지 선택을 할, 당신은 사용할 수 있습니다 지글 지글 jQuery의 셀렉터가의 기반으로하는 것입니다.
zzzzBov

3
에서 caniuse.com/#feat=getelementsbyclassname , 그것은 단지 IE8이 메소드를 지원하지 않는 것 같습니다.
tmeans

1
@ tmeans : 예, 이것이 게시 될 당시에는 꽤 큰 거래였습니다.
BoltClock

14

다른 사람들이 말했듯이 올바른 기능 이름을 사용하지 않고 모든 브라우저에 보편적으로 존재하는 것은 아닙니다.

로 id가있는 요소 이외의 것을 브라우저 간 페치 해야하는 경우 document.getElementById()모든 브라우저에서 CSS3 선택기를 지원하는 라이브러리를 얻는 것이 좋습니다. 개발 시간, 테스트 및 버그 수정을 크게 줄일 수 있습니다. 가장 쉬운 방법은 jQuery를 사용하는 것입니다. jQuery 는 광범위하게 사용 가능하고, 훌륭한 문서가 있으며, 무료 CDN 액세스 권한이 있으며, 질문에 대답 할 수있는 우수한 커뮤니티가 있습니다. 그것이 필요 이상으로 보인다면 선택기 라이브러리 인 Sizzle 을 얻을 수 있습니다 (실제로는 jQuery 및 기타의 선택기 엔진입니다). 나는 다른 프로젝트에서 자체적으로 사용했으며 쉽고 생산적이며 작습니다.

한 번에 여러 노드를 선택하려면 다양한 방법으로 수행 할 수 있습니다. 그들에게 모두 같은 수업을 주면 다음과 같이 할 수 있습니다.

var list = document.getElementsByClassName("myButton");
for (var i = 0; i < list.length; i++) {
    // list[i] is a node with the desired class name
}

해당 클래스 이름을 가진 노드 목록을 반환합니다.

Sizzle에서는 다음과 같습니다.

var list = Sizzle(".myButton");
for (var i = 0; i < list.length; i++) {
    // list[i] is a node with the desired class name
}

jQuery에서는 다음과 같습니다.

$(".myButton").each(function(index, element) {
    // element is a node with the desired class name
});

Sizzle과 jQuery에서 여러 클래스 이름을 다음과 같이 선택기에 넣고 훨씬 더 복잡하고 강력한 선택기를 사용할 수 있습니다.

$(".myButton, .myInput, .homepage.gallery, #submitButton").each(function(index, element) {
    // element is a node that matches the selector
});

2
document.getElementsByClassName caniuse.com/#feat=getelementsbyclassname
Matt Evans에

@MatthewEvans-예, 2011 년 답변입니다.
jfriend00

12

추가 오류 확인으로 넘어 가기 전에 먼저

document.getElement ByClassName () 자체.

getElement 아닌 getElement를 다시 확인하십시오.




0

철자를 잘못 입력 한 경우 "getElementsByClassName"이어야합니다.

var objs = document.getElementsByClassName("stopButton");
var stopMusicExt = objs[0]; //retrieve the first node in the stack

//your remaining function goes down here.. 
document['player'].stopMusicExt(ta.value);
ta.value = "";

document.getElementsByClassName-CLASS 속성이 여러 객체에 할당하는 데 사용되므로 둘 이상의 항목이있는 노드 스택을 반환합니다.


-1
    enter code here
var stopMusicExt = document.getElementByClass("stopButton").value;
    stopButton.onclick = function() {
        var ta = document.getElementByClass("stopButton");
        document['player'].stopMusicExt(ta.value);
        ta.value = "";
    };


// .value will hold all data from class stopButton

-1

getElementByClass, 아마도 당신은 사용할 존재하지 않습니다 getElementsByClassName. 그러나 대안 접근법을 사용할 수 있습니다 (각도 / 뷰 / 반응 ... 템플릿에서 사용)

function stop(ta) {
  console.log(ta.value) // document['player'].stopMusicExt(ta.value);
  ta.value='';
}
<input type="button" onclick="stop(this)" class="stopMusic" value='Stop 1'>
<input type="button" onclick="stop(this)" class="stopMusic" value='Stop 2'>


-1

이 "getElementByClassName"을 작성한 경우이 오류 "document.getElementByClass는 함수가 아닙니다"와 함께 발생하므로 해당 오류를 극복하려면 "getElementsByClassName"을 작성하십시오. 요소가 아닌 요소 여야하기 때문입니다.


이미 8 년 전에 답변 한 적이 있습니다. 기존 답변을 확인하여 동일한 답변에 답변하지 않을 수도 있습니다
.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.