“ 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 = "";
    };

1
ตรวจสอบนี้stackoverflow.com/questions/900117/...
จูลส์

ชื่อฟังก์ชันของคุณไม่มี '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 เท่านั้นที่ไม่สนับสนุนวิธีนี้
58

1
@tmeans: ใช่ แต่นั่นเป็นเรื่องใหญ่ในเวลานี้โพสต์
BoltClock

14

อย่างที่คนอื่นพูดคุณไม่ได้ใช้ชื่อฟังก์ชั่นที่ถูกต้องและไม่มีอยู่จริงในเบราว์เซอร์ทั้งหมด

หากคุณจำเป็นต้องทำการดึงข้อมูลข้ามเบราว์เซอร์ของสิ่งอื่นนอกเหนือจากองค์ประกอบที่มี id ด้วยdocument.getElementById()ดังนั้นฉันขอแนะนำอย่างยิ่งให้คุณได้รับไลบรารีที่สนับสนุนตัวเลือก CSS3 ในเบราว์เซอร์ทั้งหมด มันจะช่วยคุณประหยัดเวลาในการพัฒนาการทดสอบและแก้ไขข้อผิดพลาดจำนวนมาก สิ่งที่ง่ายที่สุดที่จะทำคือใช้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 s ByClassName () เอง

ตรวจสอบอีกครั้ง getElement sและไม่ใช่ getElement


9

มันควรจะเป็นและไม่getElementsByClassName getElementByClassเห็นนี้ - https://developer.mozilla.org/en/DOM/document.getElementsByClassName

โปรดทราบว่าเบราว์เซอร์ / บางรุ่นอาจไม่รองรับสิ่งนี้



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อย่างไรก็ตามคุณสามารถใช้วิธีอื่น (ใช้ในเทมเพลตเชิงมุม / vue / react ... )

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 ปีที่แล้วคุณอาจต้องการตรวจสอบคำตอบที่มีอยู่เพื่อป้องกันการตอบในสิ่งเดียวกัน
Mickael B.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.