ฉันจะเพิ่มคลาสให้กับองค์ประกอบ DOM ใน JavaScript ได้อย่างไร


253

ฉันจะเพิ่มคลาสได้divอย่างไร

var new_row = document.createElement('div');

6
เสียดายที่ spec ไม่อนุญาตให้มีการระบุคลาสเป็นพารามิเตอร์เพื่อ createElement
Gaʀʀʏ

หากคุณต้องการที่จะเพิ่มชั้นเรียนโดยไม่ต้องถอดชั้นเรียนอื่น ๆ , เห็นคำตอบนี้
MichałPerłakowski

คำตอบ:


447
new_row.className = "aClassName";

นี่คือข้อมูลเพิ่มเติมเกี่ยวกับ MDN: className


5
สิ่งที่เกี่ยวกับการตั้งชื่อชั้นเรียนหลายรายการ?
Simon

5
@Sponge new_row.className = "aClassName1 aClassName2";เป็นเพียงแอตทริบิวต์คุณสามารถกำหนดสตริงใด ๆ ที่คุณชอบแม้ว่ามันจะทำให้ HTML ไม่ถูกต้อง
Darko Z

16
ฉันจะแนะนำด้วยnew_row.classList.add('aClassName');เพราะคุณสามารถเพิ่มชื่อคลาสได้หลายชื่อ
StevenTsooo

@StevenTsooo ทราบว่าclassListเป็นได้รับการสนับสนุนใน IE9 หรือต่ำกว่า
dayuloli

มีวิธีการสร้างองค์ประกอบที่มี classname ในหนึ่งบรรทัดของรหัส - และยังคงได้รับการอ้างอิงถึงองค์ประกอบหรือไม่ ตัวอย่างเช่น: myEL = document.createElement ('div'). addClass ('yo') 'จะไม่ทำงาน
Kokodoko

36

ใช้.classList.add()วิธีการ:

const element = document.querySelector('div.foo');
element.classList.add('bar');
console.log(element.className);
<div class="foo"></div>

วิธีนี้ดีกว่าเขียนทับclassNameคุณสมบัติเนื่องจากจะไม่ลบคลาสอื่น ๆ และไม่เพิ่มคลาสหากองค์ประกอบมีอยู่แล้ว

คุณสามารถสลับหรือลบคลาสโดยใช้element.classList(ดูเอกสาร MDN )


28

นี่คือการทำงานของซอร์สโค้ดโดยใช้ฟังก์ชั่น

<html>
    <head>
        <style>
            .news{padding:10px; margin-top:2px;background-color:red;color:#fff;}
        </style>
    </head>

    <body>
    <div id="dd"></div>
        <script>
            (function(){
                var countup = this;
                var newNode = document.createElement('div');
                newNode.className = 'textNode news content';
                newNode.innerHTML = 'this created div contains a class while created!!!';
                document.getElementById('dd').appendChild(newNode);
            })();
        </script>
    </body>
</html>

8
ดังนั้น? มันทำหน้าที่เป็นตัวอย่างไม่มีอะไรผิดปกติกับเรื่องนั้น
Carey

เรื่อง"ในขณะที่สร้าง" : คุณหมายถึง"ในขณะที่ถูกสร้าง"หรือไม่? ตอบโดยแก้ไขคำตอบของคุณไม่ใช่ที่นี่ในความคิดเห็น ขอบคุณล่วงหน้า.
Peter Mortensen

คำอธิบายจะอยู่ในลำดับ ตัวอย่างเช่นคุณหมายถึงอะไรโดย"วิธีการฟังก์ชั่น" ? คุณสามารถทำอย่างละเอียด (โดยการแก้ไขคำตอบของคุณไม่ใช่ที่นี่ในความคิดเห็น)? ขอบคุณล่วงหน้า.
Peter Mortensen

15

นอกจากนี้ยังมีวิธี DOM ในการทำเช่นนี้ใน JavaScript:

// Create a div and set class
var new_row = document.createElement("div");
new_row.setAttribute("class", "aClassName");
// Add some text
new_row.appendChild(document.createTextNode("Some text"));
// Add it to the document body
document.body.appendChild(new_row);

2
var newItem = document.createElement('div');
newItem.style = ('background-color:red'); 
newItem.className = ('new_class');
newItem.innerHTML = ('<img src="./profitly_files/TimCover1_bigger.jpg" width=50 height=50> some long text with ticker $DDSSD');
var list = document.getElementById('x-auto-1');
list.insertBefore(newItem, list.childNodes[0]);

2
ลองพิจารณาอธิบายว่าทำไมคุณโพสต์สิ่งนี้มันจะช่วยให้ผู้อื่นเรียนรู้
Thomas Smyth

โหวตขึ้นเนื่องจากนี่คือ JavaScript ดั้งเดิม / JavaScript วานิลลาและไม่ต้องการไลบรารีหรือกรอบงานอื่นใด
obotezat

คำอธิบายจะอยู่ในลำดับ
Peter Mortensen

1
var new_row = document.createElement('div');

new_row.setAttribute("class", "YOUR_CLASS");

สิ่งนี้จะใช้ได้ ;-)

แหล่ง


นี่ไม่ใช่วิธีแก้ปัญหาที่ดีเนื่องจากวิธีนี้ใช้ไม่ได้กับทุกเบราว์เซอร์ setAttribute รองรับเพียง 60% ของเบราว์เซอร์ที่ใช้งานอยู่ในปัจจุบัน caniuse.com/#search=setAttribute
Ragas

0

นอกจากนี้ยังควรดูที่:

var el = document.getElementById('hello');
if(el) {
    el.className += el.className ? ' someClass' : 'someClass';
}

คำอธิบายจะอยู่ในลำดับ
Peter Mortensen

0

หากคุณต้องการสร้างฟิลด์อินพุตใหม่ด้วยตัวอย่างเช่นfileพิมพ์:

 // Create a new Input with type file and id='file-input'
 var newFileInput = document.createElement('input');

 // The new input file will have type 'file'
 newFileInput.type = "file";

 // The new input file will have class="w-95 mb-1" (width - 95%, margin-bottom: .25rem)
 newFileInput.className = "w-95 mb-1"

ผลลัพธ์จะเป็น: <input type="file" class="w-95 mb-1">


หากคุณต้องการสร้างแท็กที่ซ้อนกันโดยใช้ JavaScript วิธีที่ง่ายที่สุดคือinnerHtml:

var tag = document.createElement("li");
tag.innerHTML = '<span class="toggle">Jan</span>';

ผลลัพธ์จะเป็น:

<li>
    <span class="toggle">Jan</span>
</li>

0

โซลูชันข้ามเบราว์เซอร์

หมายเหตุ: classListสถานที่ให้บริการไม่ได้รับการสนับสนุนในInternet Explorer 9 รหัสต่อไปนี้จะใช้ได้กับเบราว์เซอร์ทั้งหมด:

function addClass(id,classname) {
  var element, name, arr;
  element = document.getElementById(id);
  arr = element.className.split(" ");
  if (arr.indexOf(classname) == -1) { // check if class is already added
    element.className += " " + classname;
  }
}

addClass('div1','show')

ที่มา: วิธีเพิ่ม js


-3

สิ่งนี้จะได้ผล

$(document.createElement('div')).addClass("form-group")

5
เฉพาะในกรณีที่คุณใช้ jQuery
Dan Nguyen

1
ขอบคุณสำหรับการโพสต์สิ่งนี้ใช้ได้กับฉันฉันต้องการโซลูชัน jquery
midknyte
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.