ค้นหาเว็บไซต์

วิธีการดึงองค์ประกอบตามคลาสใน JavaScript?


ฉันต้องการแทนที่เนื้อหาภายในองค์ประกอบ html ดังนั้นฉันจึงใช้ฟังก์ชันต่อไปนี้สำหรับเรื่องนั้น:

function ReplaceContentInContainer(id,content) {
   var container = document.getElementById(id);
   container.innerHTML = content;
}

ReplaceContentInContainer('box','This is the replacement text');

<div id='box'></div>

ด้านบนทำงานได้ดี แต่ปัญหาคือฉันมีองค์ประกอบ html มากกว่าหนึ่งรายการในหน้าเว็บที่ฉันต้องการแทนที่เนื้อหา ดังนั้นฉันจึงไม่สามารถใช้ id ได้ แต่ต้องใช้ class แทน ฉันได้รับแจ้งว่า javascript ไม่รองรับฟังก์ชันในตัวใด ๆ สำหรับการดึงองค์ประกอบตาม class ดังนั้นโค้ดด้านบนสามารถแก้ไขอย่างไรเพื่อให้ทำงานกับ class แทน id ได้?

ป.ล. ฉันไม่ต้องการใช้ jQuery สำหรับเรื่องนี้

คำตอบ #1

โค้ดนี้ควรใช้งานได้ในทุกเบราว์เซอร์

function replaceContentInContainer(matchClass, content) {
    var elems = document.getElementsByTagName('*'), i;
    for (i in elems) {
        if((' ' + elems[i].className + ' ').indexOf(' ' + matchClass + ' ')
                > -1) {
            elems[i].innerHTML = content;
        }
    }
}

วิธีการทำงานคือการวนซ้ำผ่านทุกองค์ประกอบในเอกสาร และค้นหารายการคลาสของพวกมันสำหรับ matchClass หากพบการจับคู่ เนื้อหาจะถูกแทนที่

ตัวอย่าง jsFiddle โดยใช้ Vanilla JS (เช่น ไม่มีเฟรมเวิร์ก)

คำตอบ #2

แน่นอนว่าตอนนี้เว็บเบราว์เซอร์สมัยใหม่ทั้งหมดรองรับวิธีที่ง่ายกว่าต่อไปนี้:

var elements = document.getElementsByClassName('someClass');

แต่ขอเตือนว่านี่ใช้ไม่ได้กับ IE8 หรือต่ำกว่า ดูที่ http://caniuse.com/getelementsbyclassname

นอกจากนี้ เบราว์เซอร์ทั้งหมดไม่ได้ส่งกลับ NodeList บริสุทธิ์เหมือนที่ควรจะเป็น

คุณอาจยังคงดีกว่าถ้าใช้ไลบรารีข้ามเบราว์เซอร์ที่คุณชื่นชอบ

คำตอบ #3

document.querySelectorAll(".your_class_name_here");

นั่นจะใช้ได้ในเบราว์เซอร์ "สมัยใหม่" ที่ใช้วิธีนั้น (IE8+)

function ReplaceContentInContainer(selector, content) {
  var nodeList = document.querySelectorAll(selector);
  for (var i = 0, length = nodeList.length; i < length; i++) {
     nodeList[i].innerHTML = content;
  }
}

ReplaceContentInContainer(".theclass", "HELLO WORLD");

หากคุณต้องการสนับสนุนเบราว์เซอร์รุ่นเก่า คุณสามารถโหลดเอนจิ้นตัวเลือกแบบสแตนด์อโลนเช่น Sizzle (4KB ขนาดเล็ก+gzip) หรือ Peppy (10K ขนาดเล็ก) และใช้มันสำรองหากไม่พบวิธี querySelector ที่มีอยู่ในตัว

การโหลดเครื่องยนต์ตัวเลือกเพียงเพื่อให้คุณสามารถดึงองค์ประกอบที่มีคลาสบางอย่างนั้นเกินไปหรือไม่? อาจจะใช่ อย่างไรก็ตาม สคริปต์เหล่านั้นไม่ได้ใหญ่ขนาดนั้นและคุณอาจพบว่าเครื่องยนต์ตัวเลือกนั้นมีประโยชน์ในหลายๆ จุดในสคริปต์ของคุณ

คำตอบ #4

วิธีที่เรียบง่ายและง่าย

var cusid_ele = document.getElementsByClassName('custid');
for (var i = 0; i < cusid_ele.length; ++i) {
    var item = cusid_ele[i];  
    item.innerHTML = 'this is value';
}

บทความที่เกี่ยวข้อง